讓你的Socket應用相容IPv6

2021-07-09 04:02:31 字數 2181 閱讀 4125

隨著網際網路越來越普及,以及物聯網的興起,ipv4位址已遠遠不夠用,ipv6的普及將是不可避免的趨勢。以前,我們的大部分socket程式幾乎都是針對ipv4而開發,如果不做公升級重構,那麼使用ipv6位址的客戶端將無法使用服務端提供的服務。如何才能像esframework

一樣,使服務端和客戶端都可以同時支援ipv6了?使我們的p2p打洞也相容ipv6了?下面我們將要點一一點出。

首先,要了解兩個最基礎的事實:

(1)通訊的雙方,無論是服務端與客戶端之間,或是客戶端與客戶端之間的p2p通訊,必須使用相同的協議版本 -- 要麼都是ipv4,要麼都是ipv6。

(2)在沒有特別安裝附件的情況下,有的os可能只支援ipv4,有的可能只支援ipv6,有的即支援ipv4也支援ipv6。可以通過socket類的ossupportsipv6和ossupportsipv4屬性來作判斷。

要讓tcp服務端即能夠接收ipv4位址的客戶端的請求,也能接收ipv6位址客戶端的請求,前提是伺服器的os即支援ipv4也支援ipv6。預設的,windows 2003 server 是只支援ipv4的,可以通過安裝協議來使其支援ipv6。

然後,寫服務端程式時,必需同時監聽本機ipv4位址和ipv6位址,並且是監聽這兩個位址的同乙個埠。比如,像下面這樣:

int port = 9900

; tcplistener tcplistenerv4 = new

tcplistener(ipaddress.any, port);

tcplistener tcplistenerv6 = new

tcplistener(ipaddress.ipv6any, port);

如此,客戶端無論是使用的ipv4還是ipv6,其向服務端發起連線請求時,都可以被服務端接受。

我們現在假設服務端程式已經相容了ipv6,並且其提供服務的ipv4位址為192.168.0.104,ipv6位址為fe80::14d8:a209:89e6:c162%14。

那麼tcp客戶端在與服務端建立連線之前,要看本地os對ipv4和ipv6的支援情況:

(1)如果本地os僅支援ipv4,或者同時支援ipv4和ipv6,那麼簡單地,就讓其連線到伺服器的ipv4位址。示例**如下所示:

tcpclient client = new

tcpclient(addressfamily.internetwork);

client.connect(

"192.168.0.104

", 9900);

(2)如果本地os僅支援ipv6,那麼,就讓其連線到伺服器的ipv6位址。示例**如下所示:

tcpclient client = new

tcpclient(addressfamily.internetworkv6);

client.connect(

"fe80::14d8:a209:89e6:c162%14

", 9900);

對於udp而言,服務端和客戶端可以採用完全一樣的模型。要讓基於udp的應用程式相容ipv6,會稍微複雜一些。

(1)需要建立兩個udpclient例項,乙個用於ipv4,乙個用於ipv6。示例**如下所示:

int port = 9800

; udpclient udpclient4 = new

udpclient(port, addressfamily.internetwork);

udpclient udpclient6 = new

udpclient(port ,addressfamily.internetworkv6);

(2)需要在兩個udpclient例項上呼叫接收資料的方法,來接收資料。

(3)傳送資料時,需要根據目標位址是ipv4還是ipv6,來選擇正確的udpclient例項進行傳送。示例**如下所示:

public

void send(byte

data, ipendpoint endpoint)

else

}

上面的示例,我們是假設當前的os同時支援ipv4和ipv6,如果僅僅支援其中的乙個,那麼就應該只建立udpclient4或udpclient6乙個例項。

如果我們的tcp客戶端以及udp都按照了上面類似的方式進行了重構公升級,那麼,無論是基於tcp的p2p打洞,還是基於udp的p2p打洞,其邏輯**都不需要做任何修改,就可以完全相容ipv6了。

IOS 如何讓你的應用快速相容iPhone5

ios 如何讓你的應用快速相容iphone5 首先需要乙個高階一點的xcode版本,現在一般都要4.5以上了吧,然後將你的應用在模擬器中執行,選擇 硬體 裝置 iphone retina 4 inch 這個就是iphone 5 的解析度。沒有做過適配的應用就會在上下兩端出現黑邊,那麼如何做適配呢?1...

讓你手機應用載入慢的原因?

曾經試過開啟乙個手機應用但一片空白?如果你遇到,你不是唯一的。通過compuware軟體統計公司的統計,74 的使用者遇到載入超過5秒的手機 會選擇離開。然而使用者對手機應用相對有耐心一點,50 的使用者會容忍超過5秒。什麼原因使你的手機應用這麼慢呢?手機 和手機應用載入慢的原因有很多種。經常要從各...

關於socket的繫結IP

這個,socket的繫結ip啊,感覺有點繞,每次無論是看注釋還是看文件,說的都是類似於socket監聽的本地ip位址的話,但是如果在伺服器使用其繫結了127.0.0.1這個位址的話,外網就連不進來,我查閱了很多資料,最後加上自己的理解,覺得大概是這個意思。當你用socket繫結127.0.0.1的時...