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* [email protected]{@"gpsinfo":@"Gpsinfo",@"pswd":self.passWord,@"other":@"666",@"gpstype":@2015,@"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:-1
                        tag:0];

            //保持读取的长连接
            [sock readDataWithTimeout:-1
                                  tag:0];

            if (error)
            {
                NSLog(@"localizedDescription:%@",[error localizedDescription]);
                NSLog(@"localizedFailureReason:%@",[error localizedFailureReason]);
            }
            else
            {
            }

        }

    }

}


数据上传成功了,后台可以根据数据返回数据了

时间: 2024-11-05 09:57:18

socket上传nsdictionary的json数据异常的相关文章

SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法 今天开发过程中,在SpringMVC中的Action中处理前台ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语法问题或者不能满足请求),调试了好长时间

php 利用socket上传文件

php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51yip.com/php/673.html有兴趣的朋友可以看看,前面讲的那篇博文,socket的服务器和客户端都是要用php命令来运行的.平常我们上传文件是浏览本地文件,通过一个php程序将文件上传一个地方,这个时候我们用php命令来运行php程序就不方便了.这个时候我们可以用fsockopen来打开

ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html ————————————————————————————————————— ZeroMQ 官方地址:http://api.zeromq.org/4-1:zmq-send-const zmq_send_const(3)           ØMQ Manual - ØMQ/4.1.0 Name zmq_send_const – 从一个socket上发送一个固定内存数据

C# WPF ASP.net 上传多文件和数据

C# WinForm 上传多文件和数据 public static class HttpHelper { private static readonly Encoding DEFAULTENCODE = Encoding.UTF8; /// <summary> /// HttpUploadFile /// </summary> /// <param name="url"></param> /// <param name="

ajax请求json数据异常:nested exception is net.sf.json.JSONException: java.lang.reflect.InvocationTargetException] with root cause

ajax请求json数据异常:nested exception is net.sf.json.JSONException: java.lang.reflect.InvocationTargetException] with root cause 1.异常原因:所请求的json数据中包含java.util.date数据类型,但是在后台并没有将其格式转换 2.解决方法:添加工具类DateJsonValueProcessor import java.text.SimpleDateFormat; imp

关于KindEditor组件上传本地图片报服务器异常的错误

今天突然间接到一个异常信息的问题,说系统的在线文本编辑器里上传本地图片报服务器异常的错误信息,开始我用firebug调试,发现前台不报错,然后我去服务器日志里找,也没看到相关信息.看网上写的说有可能是路径或者有可能是权限问题,我看权限已经设置,路径看后干脆直接改成: $save_path = '../../xxx';//相对upload_json.php的位置来说 $save_url = ' 但是我发现上传的时候还是报错,最后刷新缓存.好了. 注:我用的是php版.

socket 上传 -- 异常处理--UDP协议 --自定义socket #29

1.异常处理 1 '''''' 2 """ 3 异常处理 4 """ 5 """ 6 1.什么是异常? 7 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,就会以异常的形式表现出来 8 造成的影响就是整个程序无法再正常运行 9 """ 10 """ 11 2.异常的结构:类型+信息+位置 12 1.异常的类型:NAMEERROR 13 2

Juploader 1.0 谷歌(chrome)浏览器中成功上传文件后返回信息异常

在项目中使用了Juploader 1.0无刷新上传文件的js组件,在IE8以上没有问题,代码如下: function InitialUploadDirectly(OnUploadFunc, buttonID, allowedExts) { $.jUploader({ button: buttonID, // 这里设置按钮id eventType: 1, //触发类型 addeventbutton: buttonID, // 要绑定事件的元素的id filenamed: buttonID + 'd

socket 上传文件

""" "" server.py """服务端 """import socketimport oss=socket.socket()s.bind(('127.0.0.1',8888,))s.listen(5) while True: c,addr=s.accept() c.sendall(bytes("上传FTP",encoding="utf-8")); f