为什么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)
答案 0 :(得分:3)
"连接" UDP套接字只是意味着在套接字上设置了目标地址。但与TCP相反,没有数据包将与对等方交换,因此不知道是否可以访问服务器。