我一直在研究套接字实现,并遇到了几种实现它们的方法。 但是我很困惑为什么一些例子创建额外的变量来完成相同的任务。
IPHostEntry ipHost = Dns.GetHostEntry("");
IPAddress ipAddr = ipHost.AddressList[0];
ServerSocket = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
ServerSocket.Connect(hostName, 56);
我设法让上面的代码折叠成两行。除了枚举IP地址的能力之外,上面的代码还有另一个好处吗?
ServerSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
ServerSocket.Connect(hostName, 56);
提前感谢您的帮助。
答案 0 :(得分:2)
在:
IPHostEntry ipHost = Dns.GetHostEntry("");
IPAddress ipAddr = ipHost.AddressList[0];
给你你当地的IP地址。那么澄清..它给你第一个。
GetHostEntry方法在DNS服务器中查询与主机名或IP地址关联的IP地址。
当空字符串作为主机名传递时,此方法返回本地主机的IPv4地址。
AddressList [0]的原因是因为一台机器可能有多个本地IP地址。
答案 1 :(得分:2)
第一个片段的目的是自动选择IPv4和IPv6。第一个片段可能有一个bug。如果有多个适配器(这是正常的),将选择任意地址族。可能会选择IPv6并且连接将失败,因为connect调用的目标不支持IPv4。
使用第二个版本。
此外,这种差异与"变量"无关。它是关于不同的语义。您可以根据需要安排变量。