2015-10-07 214 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

相關問題