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 { } } } }

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

  • 相关阅读:
    Overloaded的方法是否可以改变返回值的类型
    parseXXX的用法
    java的类型转换问题。int a = 123456;short b = (short)a;System.out.println(b);为什么结果是-7616?
    UVA 10405 Longest Common Subsequence(简单DP)
    POJ 1001 Exponentiation(大数处理)
    POJ 2318 TOYS(计算几何)(二分)
    POJ 1265 Area (计算几何)(Pick定理)
    POJ 3371 Flesch Reading Ease (模拟题)
    POJ 3687 Labeling Balls(拓扑序列)
    POJ 1094 Sorting It All Out(拓扑序列)
  • 原文地址:https://www.cnblogs.com/louyizhidu/p/4866900.html
Copyright © 2011-2022 走看看