メッセージが保留中であるかどうかを確認するにはSocket.Available
を使用できますが、Socket.Accept
を呼び出す前にクライアントがサーバーに接続しようとしているかどうかを確認するにはどうすればよいですか?クライアントが接続しようとしているかどうかを確認していますか?
答えて
しばらくして解決策を見つけました。 Socket.Blocking
プロパティをfalse
に設定するだけです。次に、Socket.Accept
関数は、保留中の接続があるかどうかをチェックします。保留中の接続があれば、この接続を受け入れます。SocketException.ErrorCode
が "10035"の場合はSocketException
がスローされます。このタイプの例外がエラーコード "10035"でスローされた場合は、終了するかどうかをチェックし、終了する場合は終了し、そうでなければSocket.Accept
関数を呼び出して手順を繰り返します。
注:同じ方法で他のブロッキングメソッドを呼び出して、実際にスレッドの実行をブロックすることができます。
出典:
https://msdn.microsoft.com/en-us/library/system.net.sockets.socket.blocking(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
TCPはどのような状況でもメッセージを確認できないようにメッセージを提供しません。 は少なくとものバイト数が表示されますが、メッセージではない可能性があります。複数のメッセージである可能性があります。また、1ns後のデータが到着すると、Available
は0
になる可能性があります。テストはあなたに何も買わない。
データや接続を確認する必要はありません。
ただ受け入れるループを実行します。
while (true) {
RunConnectionAsync(socket.Accept());
}
読書のための同じ:データが来るかもしれないときに、すべての回で優れた読み取り要求を持っています。 Read
は、データが到着するまで待機します。
Do。またはしないでください。試着はありません。 (この場合は常に実行します)
- 1. libmemcached - 接続しているかどうかを確認する
- 2. iPhoneがインターネットに接続しようとしているかどうか確認してください
- 3. クライアントがHTTP/2を使用して接続しているかどうかを確認するにはどうすればよいですか?
- 4. ユーザーがFacebookに接続しているかどうかを確認して、ページが好きかどうかを確認してください
- 5. ESP8266 - クライアントが接続されていることを確認しますか?
- 6. クライアントはどのようにしてピアツーピア接続を確立しますか?
- 7. エラー接続が超えてしまう:300私はエアロ(PHPクライアント)を接続しようとしています
- 8. ソケットが接続されるまでどのように接続しようとしていますか?
- 9. SQLiteデータベース接続がまだ開いているかどうか確認してください
- 10. WCFクライアントWCFホストが起動して動作しているかどうかを確認しますか?
- 11. ファイルがuuencodeされているかどうかを確認しようとしています
- 12. クライアントがまだ接続されているかどうかを確認する方法C++
- 13. Bluetoothが接続されているかどうかを確認する
- 14. デバイスがウェブに接続されているかどうかを確認する
- 15. ユーザーにマイクが接続されているかどうかを確認する
- 16. VB.Netポートが開いているかどうかを確認して接続を受け入れる
- 17. クライアントがurllib2を使用してphpページにアクセスしているかどうか確認してください
- 18. SignalR - ユーザーがまだ接続されているかどうかの確認
- 19. PHPスクリプトでインターネットに接続しているかどうかを確認しますか?
- 20. FB接続アップグレードが修正されているかどうかを確認しますか?
- 21. ソケットが接続されているかどうかを確認してください
- 22. UWPの状態でタップされているかどうかを確認しようとしています
- 23. クライアントがTCPでTCP接続されていないかどうかを確認するにはどうすればよいですか?
- 24. 回答セットプログラミングを使用してグラフが強く接続されているかどうかを確認するにはどうすればよいですか?
- 25. QWidgetがレイアウトに属しているかどうかを確認しますか?
- 26. Authorize.Netがアップ/ダウンしているかどうかを確認しますか?
- 27. ファイルがWindowsインストールドライブに入っているかどうか、ドライブが接続されているかどうか確認してください
- 28. 誰かがIPv6/IPv4経由で接続しているかどうかを確認する方法
- 29. 誰かがAccessデータベースに接続しているかどうかを確認する方法
これは忙しい回転になり、CPUを100%に駆動します。遅延を追加する必要があります。この遅延により、接続を受け入れるときに遅延が発生し、受け入れられる1秒あたりの接続数が大幅に制限されます(100kから10msの遅延で100になる)が、まだ効率が悪く、コードがより扱いにくいです。また、このようなコードはモバイルデバイスのバッテリを放電させることにも注意してください。私はソケットを閉じることをお勧めします。 – usr
また、例外は非常に高価(0.1ms)なので、実際には相当なCPU時間になります。また、デフォルトの設定であるすべての例外をブレークするようにデバッガを設定することはできません。デバッグ出力が汚染されます。 – usr