私は一つだけ条件の(データは読み込みのために利用可能である)を満たす場合、C#でソケットをポーリングする方法があるかどうかを思ったんだけど、私はsocket.Poll方法を知ってるが、これはtrueを返すことができます場合は、ここで指定された真のリターンを指定した3つの条件のいずれかの数:MSDN: Socket.Poll何かが読めるようになったときだけ、C#でソケットをポーリングする方法はありますか?
答えて
がListen()
が呼び出された場合
Poll(microSeconds, SelectMode.SelectRead);
- のためにtrueを返す3つの原因があるとの接続が
- を読み取るためのデータが利用可能である場合に
- を保留しています接続がクローズ、リセット、または終了した場合
は、我々はそれらを区別することができるかどうか見てみましょう:
Listen()
が以前に呼び出されている場合は、必ず知っているので、あなたがいない場合、その原因を検討する必要はありません。- あなたはそれに行きます。
- あなたはPoll()コールに滞在できず、実際に何が起きたのかを知る必要があることを意味します。 1つの方法は、
Poll()
が返された直後にソケットの状態をチェックすることです。
結論:
と3と考えるべきではない必要があります。trueが返されるたびにソケットの状態をチェックすることで処理できます。
だから私は(未テスト)のために行くだろう:
if (s.Poll(microSeconds, SelectMode.SelectRead)))
{
if (!s.Connected)
// Something bad has happened, shut down
else
// There is data waiting to be read"
}
は、クラスNetworkStreamで何かを発見しました。プロパティNetworkStream.DataAvailableは、データが読み込み可能な場合はtrueを返します。ネットワークストリームのオブジェクトは、TcpListenerとTcpClientを処理して返されます。これは、ソケットよりも高い抽象レベルです。
私はNetworkStreamにソケットから来るする方法を発見しました。 NetworkStreamはソケットを使用しており、ソケットのストリーム表現です。しかし、ネットワークストリームがソケットで何をしているのか分かりません。
あなたは、基になるハンドルでselect()システムコールを使用することができます。
私が最初に思ったこともありましたが、暗い星が本当に意味するものであれば、これは恥ずかしがりません。 – Christian13467
Listenが呼び出され、接続が保留中の場合はtrue。 - または - データが読み取り可能な場合はtrueです。 - または - 接続が閉じられた、リセットされた、または終了した場合はtrueです。 、そうでない場合はfalseを返します。
私は2番目のオプションがtrueを返すものですかどうかを確認したいことを理解できますか? Pollがtrueを返すかどうかを確認した後、接続が開いているかどうかを確認することができます。接続されていない、閉じられている、リセットされている、それが開いている場合
、それは第二の選択肢は、trueを返します。
のように:if(m_sock.Poll(-1、SelectMode.SelectRead)&&(m_sock.Connected == true))? –
私はそれを仮定します、はい。 – Phoexo
SocketプロパティAvailableを使用できます。読み取ることができるデータの量を返します。 MSDNのドキュメントによると
あなたが代わりにポール(の選択()メソッドを使用することができます)。 実際にILSpy(リフレクタツール)でSocket.Pollを調べるとき、内部コードはソケット上でselectを呼び出しています。
また、タイトなループでPoll()を呼び出すと、各呼び出しで新しいIntPtr []が実行されるため、メモリ割り当てが増加します。 Calling Select()を呼び出すと、フード内に新しい配列を割り当てる代わりに配列を再利用できます。
- 1. 同じファイルを読み書きするためにfopen "w +"をcで使う方法はありますか?
- 2. 何かイベント/デリゲートを購読したときに通知を受ける方法はありますか?
- 3. TFSを騙して、あなたがやったと思うようにする方法はありますか?
- 4. フレックスにキーボードをポーリングする方法はありますか?
- 5. Pythonでシリアルポートの変更を探すときにポーリングを避ける方法はありますか?
- 6. ICollectionをC#にもっと流暢にするためのシンプルでエレガントな方法がありますか?
- 7. PHPのソケットとは何ですか?そして、どのような状態で私はソケット接続のために行く必要がありますか?
- 8. .CDBデータベースファイルとは何ですか? C#を使ってどのように読むことができますか?
- 9. ポーリングや選択ではなく、C++で非同期TCPソケットを使用するより良い方法はありますか?
- 10. C++でユーザーの入力に「y」または「n」だけを受け入れる方法はありますか?
- 11. 正確な座標をクリックするだけで何かが起きるようにする方法
- 12. Javaは、メソッドをクラスとサブクラスだけで使用できるようにするための方法はありますか?
- 13. C++でソケットをSSLifiedソケットに変換する簡単な方法はありますか?
- 14. TOTALおよび/またはUSEDビデオメモリをポーリングするOSに依存しない方法はありますか?
- 15. subprocess.Popenから返されたファイルハンドルをポーリングする方法はありますか?
- 16. ソケットが閉じられたときにUDP .netソケットがバインドされたポートを解放する方法はありますか?この質問のために
- 17. ソケットから読み取るものがあるかどうかを検出する方法は? (C++)
- 18. ValueErrorのために何かを印刷する方法はありますか?
- 19. フレズコが大きな画像を読み込まないようにする方法がありますか
- 20. 迅速なポーリングを行う適切な方法はありますか?
- 21. タグで1回だけ交換する方法とタグを付けない方法はありますか?
- 22. ロックレスキューをポーリングするための最速レースフリーメソッドは何ですか?
- 23. リフレクターのようなソフトウェアでDLLが開けないようにする方法はありますか?
- 24. コンポーネントが初めて小道具を受け取ったときにのみ何かをするライフサイクルライフサイクルの方法はありますか?
- 25. Cでテキストファイルを読むときにWindows Cライブラリが "\ r \ n"を "\ n"に変換しないようにする方法はありますか?
- 26. 変更のために多数のファイルをどのようにポーリングする必要がありますか?
- 27. XAMLによってスローされたVisual Studioのエラーを無視する方法はありますか?私はあなたがこのような何かを分離コードでそれを行うことができます知っている
- 28. Pythonでソケットを読むとき、os.readとsocket.recvに違いはありますか?
- 29. ssh秘密鍵を使用することはできますが、読み書きはできないようにロックする方法はありますか?
- 30. 何千ものTCPソケットをポーリングする
ご回答いただきありがとうございます。 –
あなたは、Connectedがフードの中で何をしているかのように、読み込みの前に最初にWriteのpollまたはpollを呼び出す前にConnectedをチェックする必要があります。 – Jay