对于我的.NET C#应用程序,我们有需要通过TCP/IP协议进行通信的模块。
我决定使用微软的System.Net.Sockets应用程序接口
由"TcpListener“类表示的模块可以是
基于-IPv4地址的-IPv6地址
问题是,使用"TcpClient“类的模块需要以这样一种方式实例化"TcpClient”,以便智能地接受IPv4或IPv6地址(最初作为字符串传递)
更详细地说,使用"TcpClient“类的模块可以有一个如下所示的构造函数:
public ClientModule(string ipV4OrIpV6Address, int portNumber){
………………………
…………..
……….
}
当我查看微软的文档( https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.-ctor?view=netframework-4.8#System_Net_Sockets_TcpClient__ctor_System_Net_IPEndPoint_ )时,我发现了以下TcpClient构造函数:
TcpClient(IPEndPoint)
初始化TcpClient类的新实例并将其绑定到指定的本地终结点。
此外,我试图搜索更多关于实例化IPEndPoint类的内容,结果偶然发现( https://docs.microsoft.com/en-us/dotnet/api/system.net.ipendpoint.-ctor?view=netframework-4.8#System_Net_IPEndPoint__ctor_System_Net_IPAddress_System_Int32_ )
每个模块将位于不同的物理计算机服务器上。
我如何实例化微软的IPAddress对象,使其足够智能地将IPv4和IPv6地址作为字符串处理,而不管哪个作为参数传递?
发布于 2019-06-25 09:09:08
TcpClient(string, int)
构造函数最终对传入的字符串值调用IPAddress.TryParse(string)
,它将尝试将结果同时应用于IPv4和IPv6套接字。
所以,你不应该做任何特殊的事情。只需将IP地址传递给TcpClient(string, int)
构造函数,并让TcpClient
类处理它(实际上,Dns
类最终完成地址解析)。应该不需要进行任何显式工作来处理IPv6地址。自己解析地址只是浪费代码和时间。
发布于 2019-06-25 08:41:33
使用IPAddress.Parse(string ipAddress)构建终结点。
它接受一个包含IPv4点分十进制符号或IPv6冒号分隔地址字符串的字符串,并返回一个System.Net.IPAddress
。
public void ClientModule(string ipV4OrIpV6Address, int portNumber)
{
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(ipV4OrIpV6Address), int port);
TcpClient client = new TcpClient(endpoint);
// Do something with the client
}
https://stackoverflow.com/questions/56745408
复制相似问题