c# Socket实现的比较
本文关键字:比较 实现 Socket | 更新日期: 2023-09-27 18:15:13
我一直在研究套接字的实现,并遇到了几种实现它们的方法。然而,我很困惑,为什么一些例子创建额外的变量来完成相同的任务。
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);
提前感谢您的帮助
第一个代码片段的目的是在IPv4和IPv6之间自动选择。第一个代码片段可能有错误。如果有多个适配器(这是正常的),将选择任意地址族。可能IPv6将被选择,连接将失败,因为连接调用的目标不支持IPv4。
使用第二个版本
同样,这种差异与"变量"无关。这是关于不同的语义。
The:
IPHostEntry ipHost = Dns.GetHostEntry("");
IPAddress ipAddr = ipHost.AddressList[0];
给出您的本地Ip地址。好吧,澄清一下……它给你第一个。
看到Dns.GetHostEntry ()
GetHostEntry方法向DNS服务器查询与主机名或IP地址相关联的IP地址。
当传递一个空字符串作为主机名时,此方法返回本地主机的IPv4地址。
AddressList[0]的原因是一台机器可能有多个本地Ip地址