socket上传nsdictionary的json数据异常
异常情况如下:按照正常的写法,将上传对数据封装在nsdictionary里,然后检验是否符合json格式化,调用系统的json序列化方法将nsdictionary转化为json数据然后上传,
异常结果如下:
,后台只能收到收到nsdictionary的第一个{,后测试数据从nsdictionary的第一个{断开了

由于控制台打印的nsdictioanry数据如下

故猜测上传数据时"\n"作为了数据的分隔符被切断了,所以将nsdictionary转化为nsstring并且将"\n"替换为空格然后发现数据无法上传,最后追加了"\n"到nsstring末端,上传成功
完整代码如下:
#pragma mark - GCDAsyncSocketDelegate
/**
* 链接成功
*
* @param sock sock实例
* @param host IP
* @param port 端口
*/
-(void)socket:(GCDAsyncSocket *)sock
didConnectToHost:(NSString *)host
port:(uint16_t)port
{
NSLog(@"didConnectToHost");
// gpstype:2015
// name:账号
// pswd:密码 NSLog(sock.isConnected?@"YES":@"NO");
if (sock.isConnected)
{
/*
//nsstring上传需要加"\n"分隔符方可上传成功
[sock writeData:[@"ABCABCABCABCABCABC\n" dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:-1
tag:0];
*/ NSDictionary* nsDictionaryUser=@{@"gpsinfo":@"Gpsinfo",@"pswd":self.passWord,@"other":@"",@"gpstype":@,@"name":self.name}; if ([NSJSONSerialization isValidJSONObject:nsDictionaryUser])
{
NSLog(@"isValidJSONObject");
NSError* error;
//先转nsdata再转nsstring是为了保证nsdictionary格式不变
NSData *nsDataUser= [NSJSONSerialization dataWithJSONObject:nsDictionaryUser
options:NSJSONWritingPrettyPrinted
error:&error];
NSString* json=[[NSString alloc] initWithData:nsDataUser
encoding:NSUTF8StringEncoding];
// NSLog(@"nsDictionaryUser:%@",json); json=[json stringByReplacingOccurrencesOfString:@"\n"
withString:@""];
//空格根据情况可以不去掉
json=[json stringByReplacingOccurrencesOfString:@" "
withString:@""];
json=[json stringByAppendingString:@"\n"];
NSLog(@"json:%@",json); [sock writeData:[json dataUsingEncoding:NSUTF8StringEncoding]
withTimeout:-
tag:]; //保持读取的长连接
[sock readDataWithTimeout:-
tag:]; if (error)
{
NSLog(@"localizedDescription:%@",[error localizedDescription]);
NSLog(@"localizedFailureReason:%@",[error localizedFailureReason]);
}
else
{
} } } }

数据上传成功了,后台可以根据数据返回数据了
socket上传nsdictionary的json数据异常的更多相关文章
- Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)
一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- 接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63
一.背景 最近项目中有个需求,就是需要把一个byte[]数组上传到服务端.但是我发现发送的byte数组和服务端接收的数组不一样,所有的正数在传递时正确,数组长度也没变化,但是负数变成了63或者负数全部 ...
- PHP socket上传文件图片
最近了解了下下socket方面的东西,想做一个socket上传文件的例子. 在网上搜了搜代码执行后,图片数据传输了一半,图片的下半部分是灰色的.然后就自己仿着搜来的代码和php.net 中socket ...
- SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法
最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@Respon ...
- php 利用socket上传文件
php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...
- ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request 不进入controller
今天开发过程中,在SpringMVC中的Action中处理前台ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语 ...
- ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据
ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ——————————————————————————————————— ...
随机推荐
- ubuntu 16.04 && google账号问题
1.按ctrl + H 可以显示文件夹的隐藏内容 2.创建文件夹 sudo mkdir -p /usr/share/fonts/vista 创建文件用 vim filename.xxx ...
- mysql中添加中文存储和显示功能
1. 在 /etc/mysql/my.cnf中添加 [mysqld]character-set-server=utf8 [client]default-character-set=utf8 2. 检查 ...
- Day6上 括号匹配专项
滑稽的题 T1 #include<iostream> #include<cstring> #include<queue> #include<algorithm ...
- 1.字符串池化(intern)机制及拓展学习
1.字符串intern机制 用了这么久的python,时刻和字符串打交道,直到遇到下面的情况: a = "hello" b = "hello" print(a ...
- Python之人工智能:PyAudio 实现录音 自动化交互实现问答
Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...
- JS的函数参数传递为值传递
function setAge(i) { alert(i);//24 i = 18; alert(i);//18,i的改变不会影响外面的age }; var age = 24; setAge(age) ...
- 【Microsoft Azure学习之旅】测试消息队列(Service Bus Queue)是否会丢消息
组里最近遇到一个问题,微软的Azure Service Bus Queue是否可靠?是否会出现丢失消息的情况? 具体缘由如下, 由于开发的产品是SaaS产品,为防止消息丢失,跨Module消息传递使用 ...
- Cordova各个插件使用介绍系列(七)—$cordovaStatusbar手机状态栏显示
在项目中发现Android和iOS在手机状态栏样式不一样,然后就查到有一个cordova插件可以解决这个问题 1.下载插件$cordovaStatusbar命令: cordova plugin add ...
- Git入门体验
Git这个东西我也是最近才知道的,然后知道后却发现一个事实:自己真的是太LOW啦!竟然连Git都不知道!!!??? Git 在实际协同工作时会为我们提供巨大帮助, 下面简单介绍一下Git的用法: 一. ...
- 【JavaScript 封装库】BETA 3.0 测试版发布!
/* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...