- ベストアンサー
ネットワークプログラミングについて
このたびWinSock2を使用し、ネットワークゲームを制作している者ですが、分からないことがあるので質問します。 通信はTCPで行っていて、メッセージはウィンドウのコールバックに渡しているのですが、連続でSendすると最初のメッセージしか届いていないようです・・・ 特にエラーは出ていないようですし、原因が分からなくてこまっています。あらゆる条件で行いましたが同じでした。 連続でSendというのは、 send("a",2,0); send("b",2,0); send("c",2,0); というようにです。 一定の間隔をあけて送信すればちゃんと届くのですが・・ これは仕様で仕方がないのでしょうか・・・ とてもこまっています、どなたか回答をお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
send("a",2,0); send("b",2,0); send("c",2,0); これを常に3回のrecvで受け取ると考えていまえんか? そうではありません。 連続で送ったなら recvで受け取ったとき "a(NULL)b(NULL)c(NULL)" と3回のsendで送ったデータ全てが1回のrecvで来ている可能性があります。 recvの戻り値には何バイト受け取ったかが入っているので今回の場合 それが2バイトではなく、6や4が入っている可能性があるので確かめてください。
その他の回答 (1)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
APIの返値をすべてチェックしても、エラーは返っていないのですね? それであれば、たとえば連続して send("a",2,0); send("b",2,0); send("c",2,0); を行ったときに、受け取り側には { 'a', 0, 'b', 0, 'c', 0 } の6バイトがまとめて届いている、あるいは最初の2バイトに続けて残りの4バイトが届いているということはないでしょうか。(SOCK_STREAMを使う場合、送信したデータと同じ区切り方でデータが受信されるとは限りません。)
お礼
分かりやすい回答ありがとうございました、おかげで無事解決しました。
お礼
本当です、できました! そうやってどんどんたまっていくんですね^^; ありがとうございました。