【问题标题】:Send Data packet to Client向客户端发送数据包
【发布时间】:2017-06-08 08:38:39
【问题描述】:

我需要发送包含 JSON 字符串的 NSData 以及总长度(实际字符串的长度+实际字符串的长度)。我需要发送一个数据包,保留前 10 个字节作为字符串长度,然后按字符串

在发送 NSData 对象时,我还需要在前 10 个字节中发送其长度,然后发送如下数据:

数据长度 + JSON 字符串 = 发送到 java 客户端的总数据。

进一步的 java 客户端将读取前 10 个字节以了解数据的实际长度,从而形成一个字节数组并进一步移动。

【问题讨论】:

  • 请更具体。您对任务的哪一部分有疑问。创建 JSON,将长度和负载组合成单个负载,实际发送数据...
  • 嗨,现在请看

标签: ios objective-c client-server gcdasyncsocket


【解决方案1】:

这个蛮力示例使用前 10 个字符来表示有效负载长度的字符串,然后是实际有效负载。

NSArray *arrPayload = @[@"Hello", @"world"];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arrPayload
                                                   options:0
                                                     error:nil];

NSString *jsonString = [[NSString alloc] initWithData:jsonData
                                             encoding:NSUTF8StringEncoding];

NSString *comboString = [NSString stringWithFormat:@"%010lu%@", 
                            (unsigned long)jsonString.length, jsonString];

NSLog(@"%@", comboString);

NSData* combinedData = [comboString dataUsingEncoding:NSUTF8StringEncoding];

结果:

0000000017["Hello","world"]

但是:如果这应该作为 HTTP 请求发送,您可能需要考虑使用 Content-Length 标头来传递长度信息。

【讨论】:

  • 没问题。对于 java 方面,您可能应该使用“java”标签打开一个问题。基本上你应该首先检查字符串长度是否> = 10。如果是,前10个字符代表其余字符的长度。比较是否可以,是否可以进行 JSON 解析(周围有很多示例)。
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 2017-05-07
  • 2015-01-08
  • 2022-07-08
  • 2013-12-31
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多