本節(jié)引言:
1.服務(wù)端實現(xiàn)步驟:
示例代碼: public class UPDServer {
public static void main(String[] args) throws IOException {
/*
* 接收客戶端發(fā)送的數(shù)據(jù)
*/
// 1.創(chuàng)建服務(wù)器端DatagramSocket,指定端口
DatagramSocket socket = new DatagramSocket(12345);
// 2.創(chuàng)建數(shù)據(jù)報,用于接收客戶端發(fā)送的數(shù)據(jù)
byte[] data = new byte[1024];// 創(chuàng)建字節(jié)數(shù)組,指定接收的數(shù)據(jù)包的大小
DatagramPacket packet = new DatagramPacket(data, data.length);
// 3.接收客戶端發(fā)送的數(shù)據(jù)
System.out.println("****服務(wù)器端已經(jīng)啟動,等待客戶端發(fā)送數(shù)據(jù)");
socket.receive(packet);// 此方法在接收到數(shù)據(jù)報之前會一直阻塞
// 4.讀取數(shù)據(jù)
String info = new String(data, 0, packet.getLength());
System.out.println("我是服務(wù)器,客戶端說:" + info);
/*
* 向客戶端響應(yīng)數(shù)據(jù)
*/
// 1.定義客戶端的地址、端口號、數(shù)據(jù)
InetAddress address = packet.getAddress();
int port = packet.getPort();
byte[] data2 = "歡迎您!".getBytes();
// 2.創(chuàng)建數(shù)據(jù)報,包含響應(yīng)的數(shù)據(jù)信息
DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
// 3.響應(yīng)客戶端
socket.send(packet2);
// 4.關(guān)閉資源
socket.close();
}
}
2.客戶端實現(xiàn)步驟:
public class UDPClient {
public static void main(String[] args) throws IOException {
/*
* 向服務(wù)器端發(fā)送數(shù)據(jù)
*/
// 1.定義服務(wù)器的地址、端口號、數(shù)據(jù)
InetAddress address = InetAddress.getByName("localhost");
int port = 8800;
byte[] data = "用戶名:admin;密碼:123".getBytes();
// 2.創(chuàng)建數(shù)據(jù)報,包含發(fā)送的數(shù)據(jù)信息
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
// 3.創(chuàng)建DatagramSocket對象
DatagramSocket socket = new DatagramSocket();
// 4.向服務(wù)器端發(fā)送數(shù)據(jù)報
socket.send(packet);
/*
* 接收服務(wù)器端響應(yīng)的數(shù)據(jù)
*/
// 1.創(chuàng)建數(shù)據(jù)報,用于接收服務(wù)器端響應(yīng)的數(shù)據(jù)
byte[] data2 = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
// 2.接收服務(wù)器響應(yīng)的數(shù)據(jù)
socket.receive(packet2);
// 3.讀取數(shù)據(jù)
String reply = new String(data2, 0, packet2.getLength());
System.out.println("我是客戶端,服務(wù)器說:" + reply);
// 4.關(guān)閉資源
socket.close();
}
}
本節(jié)小結(jié):本節(jié)內(nèi)容比較簡單,無非就是將數(shù)據(jù)轉(zhuǎn)換為字節(jié),然后放到DatagramPacket(數(shù)據(jù)報包中),發(fā)送的 時候帶上接受者的IP地址和端口號,而接收時,用一個字節(jié)數(shù)組來緩存!發(fā)送的時候需要創(chuàng)建一個 DatagramSocket(端到端通信的類)對象,然后調(diào)用send方法給接受者發(fā)送數(shù)據(jù)報包~ 本節(jié)代碼來源于慕客網(wǎng)上的一個JavaSocket教程~有興趣的可以看看: Java Socket應(yīng)用---通信是這樣練成的 |
|
|