通常のTCP接続を介してサーバーにバイナリデータを常に送信するAndroidアプリケーションのiOSバージョンに取り組んでいます。そして、Java コードは正常に動作しますが、プレーン C のコードは動作しません。最初の一連のデータがサーバーに送信された後、接続が切断されます。CFNetwork フレームワークを使用して Java ソリューションを再実装することができましたが、私の C コードにはまだ問題があります...
C コード (エラー チェックと興味のないコードを削除):
mSocket = socket(AF_INET, SOCK_STREAM, 0);
//...
connect(mSocket, (struct sockaddr *)&sin, sizeof(sin));
int keepalive = 1;
int res = setsockopt(mSocket, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive,
sizeof(int));
int set = 1;
setsockopt(mSocket, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int));
unsigned char buffer* = //...;
int ret = send(mSocket, buffer, bufferLen, 0); //handshake with server, runs fine
while(/*there is new data*/) {
buffer = new_data(); //some fake method
ret = send(mSocket, buffer, bufferLen, 0); //On the second iteration
//write returns -1
}
ただし、CFNetwork に基づくこの Objective-C コードは問題なく動作します...
Objective-C コード:
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
host,
port,
&readStream,
&writeStream);
CFWriteStreamOpen(mServerWriteStream);
while(/*there is new data*/) {
NSData* data = //....
int wroteBytes = CFWriteStreamWrite(mServerWriteStream, [data bytes], [data length]);
}
だから私はCコードで何が間違っているのか困惑しており、ヒントをいただければ幸いです
ありがとうございました