- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TCP通信でrecvで不明な点。)
TCP通信でrecvで不明な点
このQ&Aのポイント
- TCP通信でデータ受信後にデータが受信できなくなる理由について教えてください。
- recv関数を使ってクライアントからデータを受け取るプログラムを作成していますが、データの受信が一度だけでなく継続的に行われる方法について知りたいです。
- 受信したデータを処理した後も、クライアントとの接続を維持したままデータの受信を行いたいです。どのようにすればいいでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず…… >ここで、データをRecvBufというのに入れて、そのデータ量が1212byteだというということがわかりました。 そんなの保証されていません。 1回のrecv()で10バイト受け取ってて、次に50バイト受信するかも知れませんし、1回のrecv()で指定したバッファ全てに受信するかもしれません。 TCPはストリームだということを意識しておいた方がいいでしょう。 >if(j <= 0)// データを受け取ったか? >break;// エラーなら抜ける >この部分のプログラムをコメントアウトしてclosesocket(NewSocket);を実施しないようにしたら、5秒以上たっても、1212byteを受信できなくなってしまいました。 エラーを適切に処理しなければ、その後の動作は期待するものにはならないでしょう。 ファイルオープンに失敗した。というエラーを放置して、ファイルが読み込めるのならば別ですが。 # 存在しないファイルの内容を読み込めたりするのならば。 >for(i = 0; i < 30; i++)// 受信した文字列の長さだけ繰り返す >ShowBuf[i] = RecvBuf[i];// 1文字進める 受信していないデータも読み込めそうです。 recv()で10バイトしか受信していなかった場合にRecvBuf[10]~RecvBuf[29]には何がはいるんでしょう? # 実際は前回受信したデータ(つまり賞味期限の切れたゴミ)でしょうけど。
お礼
回答頂きありがとうございます。 やはり、私の考えが間違っていました。ストリームでデータは来るのですね。