Socket.BeginConnect() が常に成功するのはなぜですか? 私の要点を説明するために次のコードを作成しました。このコードだけを実行すると、リッスンしているサーバーはなく、接続できるものは何もありませんが、問題なく動作します。
private static Socket mSocket;
static void Main(string[] args)
{
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
mSocket.BeginConnect(remoteEndPoint.Address, remoteEndPoint.Port, new AsyncCallback(OnConnect), null);
Console.Read();
}
static void OnConnect(IAsyncResult asyncResult)
{
try
{
mSocket.EndConnect(asyncResult);
Console.WriteLine(mSocket.Connected);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
System.Net.Sockets.Socket メソッドの一部は、使用すると機能しません: Socket.Connect/BeginConnect() のように、それでも機能します。これは、クライアントが TCP とまったく同じ UDP 用のコードを持っていることを意味します (これは既にあります) SocketType.Dgram, ProtocolType.Udp
。Socket.Listen()
持っています)しかし、なぜですか?UDPは接続が少ないと想定されているため、(私にとって)接続を確立することは意味がありません。
接続したいUDPクライアントを受け入れる際に機能するSocket.acceptがあった場合、理解できるかもしれません(それは均一のままで、TCPまたはUDPのいずれかを使用できるためです)