1、不可靠的、效率高、資料報(資料打成乙個小包乙個小包地往外發)、非連線。
2、udp是非連線的,因此嚴格來說並不區分伺服器端和客戶端。
3、udp通訊過程:udp都是通過位元組陣列進行對話的。
"伺服器"端:接資料
(1)新建位元組陣列,用來接收對方發過來的資料
byte buf = new byte[1024];
(2)建立資料報socket
datagramsocket ds = new datagramsocket(5678);//埠號5678是udp的5678,tcp還有乙個埠5678
(3)新建包裹datagrampacket ,包裹把byte位元組陣列都佔滿了,第二個引數表示包裹在陣列中佔的長度。當呼叫receive()方法接收資料時,將接收到的內容存放到位元組陣列buf中。
datagrampacket dp = new datagrampacket (buf, buf.length);
(4)接收對方發來的資料,有人發資料,就把資料放在包袱裡,receive也是阻塞式的方法,如果沒有人發資料,就一直等著。
ds.receive(dp);
system.out.println(new string(buf,0,dp.getlength()));//把包袱裡有的內容轉換成字串輸出string(buf,0,dp.getlength())表示通過陣列的一部分構建字串。dp.getlength() 表示位元組陣列裡到底占用了多少空間。
ds.close();
「客戶」端:發資料
(1) 將要傳送的內容轉換成位元組陣列
byte buf = (new string("hello")).getbytes();
(2)建立包裹,並把位元組陣列放進去,inetsocketaddress是socketaddress的子類表示ip位址。
datagrampacket dp = new datagrampacket(buf, buf.length, new inetsocketaddress("127.0.0.1", 5678));
(3)建立資料報socket
datagramsocket ds = new datagramsocket(9999);//9999是客戶端的埠
(4)傳送資訊
ds.sent(dp);
ds.close();
以上例子中傳的是string字串型別的訊息;如果要傳long型別的訊息,需要通過bytearrayoutputstream來傳訊息;伺服器端接收時用bytearrayinputstream。
客戶端:long n = 1000l;
bytearrayoutputstream baos = new bytearrayoutputstream();
dataoutputstream dos = new dataoutputstream(baos );//為了寫入long型的資料,採用dataoutputstream處理流
dos.writelong(n);//向位元組陣列輸出流中寫資料
byte buf = baos.tobytearray();//將流中的內容轉換成位元組陣列,進而建立datagrampacket,並用udp的 datagramsocket發出訊息。
接下來與上面的例子一致。
伺服器端:
ds.receive(dp);
bytearrayinputstream bais = new bytearrayinputstream(buf);
datainputstream dis = new datainputstream(bais);
system.out.println(dis.readlong());
注意:在udp中用的最多的流就是bytearrayoutputstream、dataoutputstream和bytearrayinputstream、datainputstream
Qt學習筆記 網路程式設計 UDP
qt中qudpsocket類進行收發udp資料報,該類父類是qabstractsocket。簡單地說,套接字socket ip位址 port埠號 ip指定網路中的哪乙個主機 port埠號指定主機的哪乙個應用程式 要使用udp,工程檔案中必須新增qt network 是否有資料可讀 bool qudp...
UNIX網路程式設計學習 五 UDP程式設計
udp相比tcp是無連線的。它收發資料是通過recvfrom和sendto兩個函式。它們的原型如下 ssize t recvfrom int sockfd,void buff,size t nbytes,int flags,struct sockaddr from,socklen t addrlen...
UDP網路程式設計
基於udp 伺服器 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.迴圈接收資料,用recvfrom 4.關閉網路連線。基於udp 客戶端 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到...