• ベストアンサー

ネットワークプログラミングについて

このたびWinSock2を使用し、ネットワークゲームを制作している者ですが、分からないことがあるので質問します。 通信はTCPで行っていて、メッセージはウィンドウのコールバックに渡しているのですが、連続でSendすると最初のメッセージしか届いていないようです・・・ 特にエラーは出ていないようですし、原因が分からなくてこまっています。あらゆる条件で行いましたが同じでした。 連続でSendというのは、 send("a",2,0); send("b",2,0); send("c",2,0); というようにです。 一定の間隔をあけて送信すればちゃんと届くのですが・・ これは仕様で仕方がないのでしょうか・・・ とてもこまっています、どなたか回答をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

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が入っている可能性があるので確かめてください。

genki140
質問者

お礼

本当です、できました! そうやってどんどんたまっていくんですね^^; ありがとうございました。

その他の回答 (1)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

APIの返値をすべてチェックしても、エラーは返っていないのですね? それであれば、たとえば連続して send("a",2,0); send("b",2,0); send("c",2,0); を行ったときに、受け取り側には { 'a', 0, 'b', 0, 'c', 0 } の6バイトがまとめて届いている、あるいは最初の2バイトに続けて残りの4バイトが届いているということはないでしょうか。(SOCK_STREAMを使う場合、送信したデータと同じ区切り方でデータが受信されるとは限りません。)

genki140
質問者

お礼

分かりやすい回答ありがとうございました、おかげで無事解決しました。

関連するQ&A