信頼できるudpプロトコルを作成しようとしていますが、サーバーがいつ接続をソケットに渡すかについて混乱しています。Javaでは、tcpサーバーは特定のポートでリッスンし、acceptでソケットを返します。
Socket clientSocket = server.accept();
acceptメソッドは、synビット交換後、または状態が確立されたときにソケットを返しますか?
acceptメソッドがソケットを返す場合、ソケットは接続状態にあり、acceptメソッドがソケットを返す前にSYN/SYN-ACKパケットが交換されます。実際、SYNパケットはacceptメソッドでは交換されません。これらのパケットは、ドライバー層(TCPスタック)で交換されます。
信頼性の高いUDPを作成しようとしている場合は、UDTプロジェクトのソースコードを確認することを強くお勧めします。これはC++で書かれていますが、このプロジェクトから多くのガイドラインを取り入れることができます。UDTプロジェクトは非常によく書かれており、非常に効率的で非常に安定しています。
Javaソケットaccept
はBSDAPIに基づいてモデル化されているため、によって返されるソケットは完全に接続されていると考えられます。
最初に質問に答えます-acceptが戻ると、ソケットが接続されます。
第二に、このようなことを行うための最良の方法は、ØMQを使用することです。これは、非常に素晴らしく、非常に役立つからです。
最後に、この記事から、次のように機能します。
ユーザーデータグラムプロトコル(UDP)は、インターネットで使用されるネットワークプロトコルのセットであるインターネットプロトコルスイートのコアメンバーの1つです。UDPを使用すると、コンピューターアプリケーションは、特別な伝送チャネルやデータパスを設定するための事前の通信を必要とせずに、インターネットプロトコル(IP)ネットワーク上の他のホストにメッセージ(この場合はデータグラムと呼ばれる)を送信できます。