我是iOS套接字编程的新手。我用erlang和{packet,4}实现了一个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];
答案 0 :(得分: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];