同じエンドポイントアドレスを定期的に構築して(再)接続できるようにしたいクライアントサーバーソケットコードがいくつかあります。localhost:17999
サーバーは次のとおりです。
// Listen for a connection:
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Loopback, 17999);
Socket listener = new Socket(IPAddress.Loopback.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
listener.Bind(localEndPoint);
listener.Listen(1);
// Accept the connection and send a message:
Socket handler = listener.Accept();
byte[] bytes = new byte[1024];
bytes = Encoding.ASCII.GetBytes("The Message...");
handler.Send(bytes);
// Clean up
handler.Shutdown(SocketShutdown.Both);
handler.Close();
handler.Dispose();
listener.Shutdown(SocketShutdown.Both);
listener.Close();
listener.Dispose();
そしてここにクライアントがあります:
byte[] bytes = new byte[1024];
Socket receiver = new Socket(IPAddress.Loopback.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
receiver.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
receiver.Connect(new IPEndPoint(IPAddress.Loopback, 17999));
int num_bytes_received = receiver.Receive(bytes);
string result = Encoding.ASCII.GetString(bytes, 0, num_bytes_received);
receiver.Shutdown(SocketShutdown.Both);
receiver.Close();
receiver.Dispose();
クライアントとサーバーを初めて作成するときは、正常に機能します。ただし、再度作成すると、エラーが発生します。
「ソケットが接続されておらず、(sendto呼び出しを使用してデータグラムソケットで送信する場合)アドレスが指定されていないため、データの送受信要求は許可されませんでした。」
次のイベントの順序で必要なときにいつでも、このメカニズムを任意に起動できるようにしたいと思います。
- サーバーを起動し、接続を受け入れるのを待ちます
- クライアントを起動してサーバーに接続します
- サーバーでクライアント接続を受け入れる
- クライアントにメッセージを送信する
- 必要に応じて繰り返す
これどうやってするの?
事前にThx!
編集:クライアントオブジェクトとサーバーオブジェクトをビルドするたびに、それは異なるプロセスからのものです。