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 に答える