• ベストアンサー

WinSockでのソケット通信

早速質問ですが、 今、クライアントからの要求をサーバに投げ、 ページ事のデータをサーバから取得し、 クライアントに表示する。と言うシステムを作成中ですが、 1ページ目の処理中に次の要求を行なうと、 (一度目のrecv()を追い越して二回目のsend()を行なう?) ポートを掴んだままになってしまい処理の続行が出来なくなってしまっています。 色々調べましたが、非ブロッキングには設定していない(ioctlsocket関数をコールしていない) と思われます。 このような状況についてご存知の方がいらっしゃったら、是非お力をお貸し下さい。

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

  • ベストアンサー
回答No.1

jun_j 様 問題となっているプログラムが掲載されていないため、 問題点を指摘することは出来ません。 以下は、アドバイスです。参考になればと思います。 1.ソケット作成時に、setsockopt関数で、SO_REUSEADDRを使用してみては いかがでしょうか? 2.ポートを指定しないでソケットを作成し、サーバーに接続すると、 Windowsが自動的に空いたポートを使用します。 同じソケットハンドルを使用すれば、もちろん受信も出来ます。 その場合、サーバー側では、recvfrom関数で、どのポートを使用したか 確認し、そのポートにデータを送信します。 これにより、ポートの取り合いにはならないと思います。 なお、クライアント側では、getsockname関数で、使用している ポート番号を取得することができます。

jun_j
質問者

補足

すみません。 なんとか自己解決を目指します。