Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我什么时候需要绑定套接字?_C#_Sockets - Fatal编程技术网

C# 我什么时候需要绑定套接字?

C# 我什么时候需要绑定套接字?,c#,sockets,C#,Sockets,何时需要绑定UDP套接字? 这段代码抛出一个异常,表示我需要先绑定套接字 // server Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0) byte[] buffer = new byte[1024]; sock.ReceiveFrom(buffer, ref

何时需要绑定UDP套接字? 这段代码抛出一个异常,表示我需要先绑定套接字

// server
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0)
byte[] buffer = new byte[1024];
sock.ReceiveFrom(buffer, ref remote);
而这个没有

// client
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint server = new IPEndPoint(IPAddress.Parse("server ip"), 1234);
byte[] toSend = { 1, 2, 3 };
sock.SendTo(toSend, server);
byte[] buffer = new byte[1024];
sock.ReceiveFrom(buffer, ref server);

我有一些理论,但没有一个看起来真的可信。

通常,在侦听之前需要绑定套接字(接收UDP调用,侦听TCP调用)。套接字可以自动绑定到随机端口。在第一种情况下,没有人知道选择的端口。在第二种情况下,可以从发送的数据包的源信息中发现端口。因此,基本上,为了能够在不显式绑定的情况下调用ReceiveFrom,我必须先发送一个数据包?@user1046192-在尝试从套接字接收之前,最好先显式绑定套接字。您可以通过将0传递为bind port参数来复制send完成的自动绑定。我相信我已经观察到,如果没有进行bind()调用,某些操作系统会为每个sendto()调用选择不同的端口。最好绑定到端口0,这样操作系统将选择一个随机端口(但随后在所有后续发送中始终使用该端口),而不是根本不调用绑定。好的,从现在起我将继续这样做。:)谢谢但是为什么你把这些答案作为评论而不是实际的答案呢?我