簡體   English   中英

如何實現TcpClient,IPEndPoint和IPAddress對象的實例化(當作為字符串傳遞時針對IPv4和IPv6地址進行實例化)

[英]How to implement instantiation of TcpClient, IPEndPoint , IPAddress objects instantiating for both cases IPv4 and IPv6 address when passed As Strings

對於我的.NET C#應用程序,我們有一些需要通過TCP / IP協議進行通信的模塊。

我決定使用Microsoft的System.Net.Sockets API

由“ TcpListener”類表示的模塊可以是

-基於IPv4地址-基於IPv6地址

問題是使用“ TcpClient”類的模塊需要實例化“ TcpClient”,以便智能地獲取IPv4或IPv6地址(最初以字符串形式傳遞)

詳細地說,使用“ TcpClient”類的模塊可以具有如下構造函數:

public ClientModule(string ipV4OrIpV6Address, int portNumber){
………………………
…………..
……….
}

當我查看Microsoft的文檔( https://docs.microsoft.com/zh-cn/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/zh-cn/dotnet/api/system.net.ipendpoint.-ctor?view=netframework-4.8 #System_Net_IPEndPoint__ctor_System_Net_IPAddress_System_Int32_

每個模塊將位於不同的物理計算機服務器上。

我該如何以這種方式實例化Microsoft的IPAddress對象,使其足夠智能,以將IPv4和IPv6地址作為字符串處理,而不管將哪個作為參數傳遞?

使用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
}

TcpClient(string, int)構造最終卷起調用IPAddress.TryParse(string)您傳遞的字符串值,它會嘗試應用的結果既在IPv4和IPv6套接字。

所以,你不應該做任何特殊。 只是通過IP地址TcpClient(string, int)構造,讓TcpClient類處理它(當然,實際上Dns類最終是什么呢地址解析)。 無需做任何明確的工作來處理IPv6地址。 自己解析地址只是浪費代碼和時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM