C#套接字实现的比较

时间:2014-07-28 03:34:20

标签: c# sockets

我一直在研究套接字实现,并遇到了几种实现它们的方法。 但是我很困惑为什么一些例子创建额外的变量来完成相同的任务。

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);

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

在:

IPHostEntry ipHost = Dns.GetHostEntry(""); 
IPAddress ipAddr = ipHost.AddressList[0]; 

给你你当地的IP地址。那么澄清..它给你第一个。

请参阅Dns.GetHostEntry()

  

GetHostEntry方法在DNS服务器中查询与主机名或IP地址关联的IP地址。

     

当空字符串作为主机名传递时,此方法返回本地主机的IPv4地址。

AddressList [0]的原因是因为一台机器可能有多个本地IP地址。

答案 1 :(得分:2)

第一个片段的目的是自动选择IPv4和IPv6。第一个片段可能有一个bug。如果有多个适配器(这是正常的),将选择任意地址族。可能会选择IPv6并且连接将失败,因为connect调用的目标不支持IPv4。

使用第二个版本。

此外,这种差异与"变量"无关。它是关于不同的语义。您可以根据需要安排变量。