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

时间:2015-10-07 11:39:54

标签: c# sockets udp system.net.sockets

为什么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);
    }
}

如果您使用SocketType.Dgram, ProtocolType.Udp Socket.Listen()但{Socket.Connect / BeginConnect()仍然可以,那么某些System.Net.Sockets.Socket方法不起作用,这很好意味着客户端UDP与TCP(我已经拥有)的代码完全相同,但为什么呢? UDP应该更少连接,所以建立连接(对我来说)是没有意义的。

如果有一个Socket.accept可以接受想要连接的UDP客户端,我可能会理解(因为它会保持统一,你可以使用任何一个用于TCP或UDP)

1 个答案:

答案 0 :(得分:3)

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

相关问题