2015-10-07 34 views
3

为什么Socket.BeginConnect()总是成功?我做了下面的代码来说明我的观点,如果你只运行这个代码,没有服务器监听,没有任何它可能连接到,但它没有问题。为什么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.UdpSocket.Listen()但Socket.Connect/BeginConnect()仍然这样做,这是很好的,这意味着客户端具有完全相同的UDP作为TCP(我已经拥有)的代码,但为什么? UDP应该是连接较少,因此建立连接(对我而言)没有意义。

如果有一个Socket.accept这在接受UDP客户端想连接我能明白(因为那将留均匀,你可以使用其中之一为TCP或UDP)

回答

3

“连接”工作一个UDP套接字只意味着在套接字上设置了目标地址。但是与TCP相反,没有数据包会与对等体交换,因此根本不知道服务器是否可以到达。

+0

所以,而不是连接它实际上只是初始化套接字,这不完全是正确的词,但好的谢谢:) – Vincent

相关问题