トップ回答者
ソケット同期・非同期通信。

質問
-
いつもお世話になっております。ソケット通信に関しての質問があります。以下のように同期ソケットにて、送信してすぐに応答を受信するというサンプルは正常に動作しました。
http://msdn2.microsoft.com/ja-JP/library/system.net.sockets.socket.aspx
私の環境では同じソケットでサーバーからのメッセージを非同期で待つ必要があるため、接続後すぐにBeginReceiveを行っています。この状態で上と同じことを行うとReceiveする前に非同期で受信してしまいます。Receiveで同期的に受信するにはSendする前にBeginReceiveをキャンセルする必要があるかと思いますがその方法がわかりません。EndReceiveするにはIAsyncResultが必要ですが、これを取得する方法がわかりません。キャンセルする方法、もしくは別の方法があればご指導ください。よろしくお願いいたします。
環境:VS2005 C#2.0 WinXP
回答
-
Myon さんからの引用 ため、接続後すぐにBeginReceiveを行っています。この状態で上と同じことを行うとReceiveする前に非同期で受信してしまいます。Receiveで同期的に受信するにはSendする前にBeginReceiveをキャンセルする必要があるかと思いますがその方
BeginReceiveをキャンセルするって意味がよくわかりませんが、まずは、
http://msdn2.microsoft.com/ja-jp/library/fx6588te.aspx
http://msdn2.microsoft.com/ja-jp/library/bew39x2a.aspxを参考にして、BeginReceive EndReceive, BeginSend,EndSend の使い方を理解すると良いかと。
それと、クライアントとサーバーで、同期を取るには、上記のページにあるように、ManualResetEventなどの同期オブジェクトを使って、同期することになると思います。
すべての返信
-
Myon さんからの引用 ため、接続後すぐにBeginReceiveを行っています。この状態で上と同じことを行うとReceiveする前に非同期で受信してしまいます。Receiveで同期的に受信するにはSendする前にBeginReceiveをキャンセルする必要があるかと思いますがその方
BeginReceiveをキャンセルするって意味がよくわかりませんが、まずは、
http://msdn2.microsoft.com/ja-jp/library/fx6588te.aspx
http://msdn2.microsoft.com/ja-jp/library/bew39x2a.aspxを参考にして、BeginReceive EndReceive, BeginSend,EndSend の使い方を理解すると良いかと。
それと、クライアントとサーバーで、同期を取るには、上記のページにあるように、ManualResetEventなどの同期オブジェクトを使って、同期することになると思います。