網絡編程UDP協議
課程大綱
一、 UDP協議概述
1、 UDP是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據包都是獨立的信息,包括完整的源地址和目的地址,他在網絡上以任何可能的路徑傳往目的地,因此能否到大目的地,到大目的地的時間以及正確性都是不能被保證的,每個被傳輸的數據包的大小必須保證在64K以內。
2、 主要使用以下兩個類:
(1)、DatagramPacket:此類表示數據報包
(2)、DatapramSocket:此類表示發送和接受數據報包的套接字。
二、 UDP服務器與客戶端程序
1、 服務器端:
(1)、String info = “…….”;
(2)、//將信息封裝成數據報
Byte[] bytes = Info.getBytes();
(3)、DatagramSocket dp = new DatagramSocket(bytes,0,bytes.lenth(),InetAddress.getByName(“localhost”),5000)//客戶端5000端口監。
(4)DatagramSocket server new DatagramSocket(5000);//服務器的端口。
(5)、server.send(dp);//發送數據報
(6)、server.close();
2、客戶端
(1)、byte[] b = new byte[1024];接受內容
(2)、DatagramPacket dp = new DatagramPacket(b,b.length);//接收內容
(3)、DatagramSocket client = new DatagramSocket(5000);//客戶端在5000端口等待。
(4)、client.receive(dp);接受內容
(5)、System.out.pritln(new String(dp.getData(),0,dp.getlength()))
(6)、client.close();
服務端代碼
package us.google.www;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP發送端
* @author chongrubujing
*
*/
public class UDPServerDemo {
public static void main(String[] args) throws IOException {
String info = "我是一隻小小鳥";
//把數據轉換成字節數組
byte[] bytes = info.getBytes();
//創建一個數據包對象,參數(要發送的字節數組,數組起始位置,要發送數組的長度,InetAddress,接收端端口號)
DatagramPacket dp =new DatagramPacket(
bytes,0,bytes.length,
InetAddress.getByName("192.168.0.51"),
5000);
//創建一個UDP協議的Socket對象
DatagramSocket ds = new DatagramSocket(300);
ds.send(dp);//發送數據報
System.out.println("發送完畢!");
}
}
客戶端代碼
package us.google.www;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP接收端
* @author chongrubujing
*
*/
public class UDPClientDemo {
public static void main(String[] args) throws IOException {
byte[] bytes = new byte[1024];
//創建一個數據包對象
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//創建DUP協議的Socket對象
DatagramSocket ds = new DatagramSocket(000);//在此端口進行監聽
System.out.println("接受端正在接受數據!");
ds.receive(dp);//接受數據,該方法會造成阻塞
String info = new String(dp.getData(),0,dp.getLength());
System.out.println(info);
ds.close();
}
}