udp簡介:udp 是user datagram protocol的簡稱, 中文名是使用者資料報協議,是
一種無連線的傳輸層
協議,提供面向事務的簡單不可靠資訊傳送服務。udp是與tcp相對應的協議,它是面向非連線的協議,它不與對方連線,而直接把資料報傳送過去。「面向非連線」就是正式通訊前不必與對方建立連線,不管對方狀態就直接傳送。
udp特性:
(1)udp是乙個無連線協議,傳輸資料之前,源端和終端不建立連線,當它想傳送時就簡單的抓取來自應用程式的資料,並盡可能快的把他扔到網路上。在傳送端udp傳送的速度僅僅是受應用程式資料生成的速度、計算機能力和傳輸頻寬限制;在接收端,udp把每個訊息段放在佇列中,應用程式每次從佇列中讀取乙個訊息段。
(2)由於傳輸資料不建立連線,因此也就不需要維護連線狀態,包括收發狀態等,因此一台服務機可同時向多台客戶機傳輸相同的資訊。
(3)udp資訊包的標題很短,只有8個位元組,相對於tcp的20個位元組資訊包的額外開銷很小。
(4)吞吐量不受擁擠控制演算法的調節,只受應用軟體生成資料的速率、傳輸寬頻、源端和終端主機效能的限制。
(5)udp使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈結狀態表(該表中有許多引數)。
(6)udp是面向報文的。傳送方對應用程式交下來的報文,在新增首部後就向下交付個ip層。既不拆分,也不合併,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。
示例:在解決方案建立兩個控制台程式:udpsender,udpreceive
備註:(1)vs2012啟動兩個專案需設定:右鍵解決方案->通用屬性->啟動專案->多啟動專案->勾選你要啟動的多個專案->確定->啟動
(2)vs2012始終能看到解決方案的設定:工具->配置->專案和解決方案->常規->總是顯示解決方案
(3)ipendpoint類包含應用程式連線到主機的服務所需的主機和本地或遠端埠資訊。通過組合服務的主機ip位址和埠號,ipendpoint形成到服務的連線點。
客戶端:
using system;
using system.collections.generic;
using system.linq;
using system.net;
using system.net.sockets;
using system.text;
using system.threading.tasks;
namespace udpsender
class program
static void main(string args)
byte data = new byte[1024];
string input,stringdata;
console.writeline("this is a client.host name is ",dns.gethostname());
//設定伺服器ip和埠號
ipendpoint ipep = new ipendpoint(ipaddress.parse("127.0.0.1"),8001);
//定義網路型別,資料連線型別和網路協議udp
socket server = new socket(addressfamily.internetwork,sockettype.dgram,protocoltype.udp);
string welcome = "hello! i am a client";
data = encoding.ascii.getbytes(welcome);
server.sendto(data,data.length,socketflags.none,ipep);
ipendpoint sender = new ipendpoint(ipaddress.any,0);
endpoint remote = (endpoint)sender;
data = new byte[1024];
//對於不存在的ip位址,加入此行**後,可以在指定時間內解除阻塞模式限制
socketoptionname.receivetimeout, 100);
int recv = server.receivefrom(data,ref remote);
console.writeline("message received from : ", remote.tostring());
console.writeline(encoding.ascii.getstring(data, 0, recv));
while(true)
input = console.readline();
if(input == "exit")
break;
server.sendto(encoding.ascii.getbytes(input),remote);
data = new byte[1024];
recv = server.receivefrom(data,ref remote);
stringdata = encoding.ascii.getstring(data,0,recv);
console.writeline(stringdata);
using system;
using system.collections.generic;
using system.linq;
using system.net;
using system.net.sockets;
using system.text;
using system.threading.tasks;
namespace udpreceive
class program
static void main(string args)
int recv;
byte data = new byte[1024];
//得到本機ip,設定埠號
ipendpoint ipep = new ipendpoint(ipaddress.any,8001);
socket newsock = new socket(addressfamily.internetwork,sockettype.dgram,protocoltype.udp);
//繫結網路位址
newsock.bind(ipep);
console.writeline("this is a server, host name is ", dns.gethostname());
//等待客戶機連線
console.writeline("waiting for a client");
//得到客戶端ip
ipendpoint sender= new ipendpoint(ipaddress.any,0);
endpoint remote = (endpoint)(sender);
//接受資料
recv = newsock.receivefrom(data,ref remote);
console.writeline("message received from ",remote.tostring());
console.writeline(encoding.ascii.getstring(data,0,recv));
//客戶端連線成功後,傳送資訊
string welcome = "hi i am a server";
data = encoding.ascii.getbyte(welcome);
//傳送資訊
newsock.sendto(data,data.length,socketflags.none,remote);
while(true)
data = new byte[1024];
//傳送接受的資訊
recv = newsock.receivefrom(data,ref remote);
console.writeline(encoding.ascii.getstring(data,0,recv));
newsock.sendto(data,recv,socketflags.none,remote);
C 網路程式設計之UDP
udp和tcp是網路通訊常用的兩個傳輸協議,c 一般可以通過socket來實現udp和tcp通訊,由於.net框架通過udpclient tcplistener tcpclient這幾個類對socket進行了封裝,使其使用更加方便,本文就通過這幾個封裝過的類講解一下相關應用。與tcp通訊不同,udp...
網路程式設計之UDP協議
將資料及源和目的封裝成資料報,不需要建立連線。每個資料報的大小限制在64k內。因無連線,是不可靠的協議,但是速度快。客戶端 1 建立udp傳輸的傳送端 2 建立udp的socket服務 3 將要傳送的資料封裝到資料報中 4 通過udp的socket服務獎資料報傳送過去 5 關閉socket服務 pu...
Linux 網路程式設計之UDP
1.介紹 udp協議是無連線的,不可靠傳輸的協議.伺服器與客戶端的互動不需要建立連線,沒有流量控制的功能。與tcp一樣,它也是傳輸層協議,通訊過程中需要ip位址與埠號。使用udp進行程式設計包括伺服器與客戶端,下面介紹一下伺服器與客戶端的通訊流程 伺服器流程 1 建立伺服器套接字描socket 2 ...