C UDP打洞通訊個人總結

2022-01-17 14:52:10 字數 2489 閱讀 1496

1、為什麼要udp打洞

現在大多數電腦上網都是通過路由器分配的網路進行上網的,當其中一台電腦請求網路時,路由器中的nat軟體會給這台電腦分配乙個隨機的埠號並將內網ip轉換為公網ip,提供與外部網路的通訊,當不是同乙個區域網(不同路由器使用者、路由器使用者和貓使用者)中的兩台電腦相互請求通訊時,由於不知道對方路由器分配的隨機埠號,所以就無法直接進行通訊了,這樣就需要udp打洞了。(nat可有效解決ip資源緊缺和日益匱乏的問題)

2、打洞過程

udp打洞是通過乙個server端(ip固定),來接收兩個請求相互通訊的電腦的公網ip和隨機埠號,然後傳送給對方,這樣兩個請求相互通訊的電腦就可以根據對方的公網ip和路由器分配的隨機埠號進行通訊了

(1)客戶端a請求server

(2)客戶端b請求server

(3)server把客戶端a的公網ip和埠資訊發給客戶端b、server把客戶端b的公網ip和埠資訊發給客戶端a

(4)  客戶端a和客戶端b通過對方公網ip和埠相互通訊

注: 個人測試時發現,客戶端a和客戶端b請求順序無關,傳送資訊順序無關,只要知道對方ip和埠號即可馬上通訊,沒有網路上說的,建立信任過程(可能和路由器有關,我測試的不一定正確)

3、實現**

客戶端**

using

system;

using

system.net;

using

system.net.sockets;

using

system.text;

using

system.windows.forms;

namespace

udpclienttest

//傳送資訊給服務端

udpclient udpclient;

string requesteripstr = null;//

請求通訊的另乙個客戶端的ip資訊

string flag = "

hello!";

private

void button2_click(object

sender, eventargs e)

else

}//接收資訊

private

void timer1_tick(object

sender, eventargs e)

else}}

//傳送資訊

private

void button1_click(object

sender, eventargs e)

else

}//傳送資訊

private

void sendmessage(string sendmsg, string

requestip)}}

}

服務端**

using

system;

using

system.net;

using

system.net.sockets;

using

system.text;

using

system.windows.forms;

using

system.collections.generic;

using

system.linq;

namespace

udpserver

udpclient udpserver;

list

clientiplist = new list();

//開始監聽

private

void button1_click(object

sender, eventargs e)

else

}//接收資訊

private

void timer1_tick(object

sender, eventargs e)

}else}}

}private

void sendmessage(string sendmsg, string

clientipport)}}

4、介面效果

5、使用步驟

將服務端放到乙個非路由器的網路中(伺服器),啟動服務端,點選監聽,然後檢視公網ip,將客戶端複製到兩台不同的電腦中(兩台電腦不在同乙個區域網),啟動客戶端1,連線ip位址填服務端所在的公網ip,啟動客戶端2,連線ip位址填服務端所在的公網ip,當兩個客戶端都提示可以相互通訊後,就可以相互傳送資訊了,傳送資訊順序無關。

程序間通訊(個人總結)

對於程序間通訊 interprocess communication 的幾種機制,我在前面都是零散的歸納,並且寫出了每種機制的使用方法,但是沒有系統的進行過歸類。最近在一位學長的推薦下,通過閱讀外文資料,腦海裡對於這方面的知識真是清晰了許多,我覺得有必要跟大家分享一下。1.首先對於程序間通訊工具的分...

udp通訊個人理解

udp通訊的特點 1.是無連線的通訊協議,不需要經過listen acccept.2.如果接收端比傳送端速率要慢,udp會儲存一段時間的資料 大約1s 其餘資料會扔掉.3.相對於tcp,udp更加高效,當然不夠安全.4.收發雙方不需要握手,如果一定需要,可以在應用層設定.udp的步驟相對簡單 1.配...

京信通訊個人面經

最近找工作實在有點病急亂投醫的感覺,導致我向每一家和本專業有一點關係的公司企業都投出了簡歷,當然,石沉大海的居多,這次是目前為止我面得最徹底的一次吧,所以記下來,希望從中能記住一些東西吧。該公司是網投的,收到一面的通知是15日上午,之前我還想著要不要穿正式一點,後來想來想還是算了,一是確實沒有正裝,...