为什么 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 方法不起作用:SocketType.Dgram, ProtocolType.Udp
就像Socket.Listen()
但 Socket.Connect/BeginConnect() 仍然可以,这很好,这意味着客户端具有与 TCP 完全相同的 UDP 代码(我已经有)但是为什么?UDP 应该是较少的连接,所以建立连接(对我来说)没有意义。
如果有一个 Socket.accept 可以接受一个想要连接的 UDP 客户端,我可能会理解(因为它会保持统一,你可以使用 TCP 或 UDP 中的任何一个)