0

我是 iOS 套接字编程的新手。我已经用带有 {packet, 4} 的 erlang 实现了一个 tcp 服务器,在 erlang 套接字之间进行通信很容易。但是如何在 AsyncSocket 中将数据包的长度添加到 4 个字节中?

一些代码表示赞赏。

我进行了如下测试,但对我的服务器端没有影响:

int s = 10;
NSMutableData *headData = [NSMutableData dataWithBytes:&s length:4];

const char *body = [@"hello" UTF8String];
NSMutableData* bodyData = [NSMutableData dataWithBytes:body length:strlen(body)];

[sock writeData:headData withTimeout:-1 tag:100];
[sock writeData:bodyData withTimeout:-1 tag:101];
4

1 回答 1

0

你告诉服务器你正在发送 10 个字节,而实际上你没有。您需要使用您发送的数据的实际长度。而且,由于服务器可能与您的机器具有不同的字节序,您需要确定协议中的长度是小端还是大端:

const char *body = [@"hello" UTF8String];
NSMutableData* bodyData = [NSMutableData dataWithBytes:body length:strlen(body)];

uint32_t s = strlen(body);
uint32_t swapped = CFSwapInt32HostToBig(s)
NSMutableData *headData = [NSMutableData dataWithBytes:&swapped length:4];

[sock writeData:headData withTimeout:-1 tag:100];
[sock writeData:bodyData withTimeout:-1 tag:101];
于 2013-02-28T19:14:55.900 回答