zoukankan      html  css  js  c++  java
  • socket上传nsdictionary的json数据异常

    异常情况如下:按照正常的写法,将上传对数据封装在nsdictionary里,然后检验是否符合json格式化,调用系统的json序列化方法将nsdictionary转化为json数据然后上传,

    异常结果如下:,后台只能收到收到nsdictionary的第一个{,后测试数据从nsdictionary的第一个{断开了

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

    故猜测上传数据时" "作为了数据的分隔符被切断了,所以将nsdictionary转化为nsstring并且将" "替换为空格然后发现数据无法上传,最后追加了" "到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上传需要加" "分隔符方可上传成功
    [sock writeData:[@"ABCABCABCABCABCABC " dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0]; */ NSDictionary* nsDictionaryUser=@{@"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:@" " withString:@""];
    //空格根据情况可以不去掉 json
    =[json stringByReplacingOccurrencesOfString:@" " withString:@""]; json=[json stringByAppendingString:@" "]; 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 { } } } }

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

  • 相关阅读:
    java实现按对象某个字段排序,排序字段和规则自定义
    JVM调优
    Spring事务的5种隔离级别
    Spring的七种事务传播机制
    jdk动态代理和cglib动态代理的区别
    spring事务的开启方式(编程式和声明式)
    jetty启动(server-connector-handle-start-join)
    浅谈background-size的几个属性值
    如何解决各类尺寸移动端自适应的问题?
    如何实现一个盒子看起来缓慢消失切换到另一个页面的效果?
  • 原文地址:https://www.cnblogs.com/louyizhidu/p/4866900.html
Copyright © 2011-2022 走看看