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)}}
}
using4、介面效果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)}}
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日上午,之前我還想著要不要穿正式一點,後來想來想還是算了,一是確實沒有正裝,...