を受け取るCソケットの質問に戻る。recvを使用して着信文字配列
クライアントからTCP経由でchar配列を受け取ろうとしています。
char buffer[2048];
int recvBytes = 0;
while (1) {
if ((clntSockfd = accept(servSockfd, (struct sockaddr *) &clntAddr, &clntSockAddrLen)) == -1) {
printf("Unable to accept client connection\n");
exit(1);
}
else {
printf("Client connection accepted!\n");
}
/* clear buffer */
memset(buffer, 0, sizeof(buffer));
recvBytes = recv (clntSockfd, buffer, sizeof(buffer), 0);
printf("Bytes received: %i\n", recvBytes);
printf("Char array received: %s\n", buffer);
}
私は実行時に、によりrecvbytesは最初の反復におけるゼロ示すことに注意:私は、次のRECVコードを有しています。 2番目の繰り返しの後で、それは着信char配列をピックアップします。
着信ソケットからデータを受信するまでrecvブロックを探していますか?バッファ内の不要な文字をどのように破棄するか、つまり、最初の繰り返しから受け取った文字を削除する必要があります。
多くの感謝!
- 編集---
こんにちはすべて、私は日食のコンソール出力を追加しました。
**... <- initialization stuff
Binding socket to port
Socket binded
Start listening on port 8081.
Client connection accepted! *while loop - first iteration
Bytes received: 0 *while loop - first iteration
Char array received: *while loop - first iteration
Client connection accepted! *while loop - second iteration
Bytes received: 22 *while loop - second iteration
Char array received: 1~Message~HowAreYou? *while loop - second iteration**
上記のコンソール出力が、第1回目と第2回目の繰り返しについて私の質問を明確に示してくれることを願っています。上記から、最初の反復ではバイトは受信されませんが、recvはブロックされません。私はrecvがバイトを受け取るまでブロックすると思った?
recvはバッファに文字がなくなるまでブロックします。返される値(recvBytes)はバッファ内の文字の数です。 – KevinDTimm
@KevinDTimm: 'setsockopt'を使用してソケットを非ブロッキングモードにします。 –
OPがより多くの情報を投稿すると、私たちはより良い回答を与えることができました(IOW、質問の質と同じです) – KevinDTimm