为什么即使没有服务器,socket.BeginConnect()也总是成功

本文关键字:成功 BeginConnect socket 服务器 为什么 | 更新日期: 2023-09-27 18:16:21

为什么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.socket.socket方法不工作,如果你使用:SocketType.Dgram, ProtocolType.UdpSocket.Listen()但Socket.Connect/BeginConnect()仍然做,这是很好的,这意味着客户端有完全相同的代码UDP作为TCP(我已经有),但为什么?UDP应该是连接较少,所以建立连接(对我来说)没有意义。

如果存在Socket。接受工作在接受一个UDP客户端,想要连接我可能会理解(因为它会保持统一,你可以使用任何一个TCP或UDP)

为什么即使没有服务器,socket.BeginConnect()也总是成功

"连接"UDP套接字只是意味着在套接字上设置了目标地址。但是与TCP相反,不会与对等端交换数据包,因此不知道是否可以到达服务器。