image.png
image.png
適用于一次的少量的連接
服務器
package com.company;
import java.io.IOException;
import java.net.*;
public class UDPServer {
public static void main(String[] args) {
try {
//1、創(chuàng)建服務器端DatagramSocket
DatagramSocket datagramSocket = new DatagramSocket(8080);
while (true){
//2君丁、創(chuàng)建數(shù)據(jù)報啼辣,用于接收客戶端發(fā)送的數(shù)據(jù)
byte[] bytes=new byte[1024];//1k
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
System.out.println("服務器端等待新的客戶端發(fā)送數(shù)據(jù)");
//3朴乖、此方法在獲取到數(shù)據(jù)報之前原环,會處于阻塞狀態(tài)
datagramSocket.receive(datagramPacket);
new UDPServerThread(datagramSocket,datagramPacket,bytes).run();
}
// datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
多線程
package com.company;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServerThread extends Thread {
DatagramPacket datagramPacket;
byte[] bytes;
//和本線程相關的DatagramSocket
DatagramSocket datagramSocket = null;
public UDPServerThread(DatagramSocket datagramSocket,DatagramPacket datagramPacket,
byte[] bytes) {
this.datagramSocket = datagramSocket;
this.datagramPacket = datagramPacket;
this.bytes = bytes;
}
@Override
public void run() {
try {
//4、讀取數(shù)據(jù)
String info = new String(bytes, 0, datagramPacket.getLength(), "gbk");
System.out.println("獲取到客戶端數(shù)據(jù):" + info);
//5芽世、響應客戶端數(shù)據(jù),創(chuàng)建數(shù)據(jù)包
InetAddress address = datagramPacket.getAddress();//客戶端地址
int port = datagramPacket.getPort();//客戶端端口
byte[] bytes1 = "歡迎您".getBytes("gbk");
DatagramPacket packet = new DatagramPacket(bytes1, bytes1.length, address, port);
datagramSocket.send(packet);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客戶端
package com.company;
import java.io.IOException;
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
try {
//1聋呢、定義服務器的地址、端口號颠区、數(shù)據(jù)
InetAddress inetAddress = InetAddress.getByName("localhost");
int port = 8080;
//2削锰、創(chuàng)建DatagramSocket對象
DatagramSocket socket = new DatagramSocket();
//3、創(chuàng)建數(shù)據(jù)報
byte[] bytes = "admin;456".getBytes("gbk");
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, inetAddress, port);
//4毕莱、發(fā)送數(shù)據(jù)報
socket.send(packet);
//5器贩、闖將獲取的數(shù)據(jù)報
byte[] bytes1 = new byte[1024];
DatagramPacket packet1 = new DatagramPacket(bytes1, bytes1.length);
socket.receive(packet1);
String info = new String(bytes1, 0, packet1.getLength(), "gbk");
System.out.print("收到服務端數(shù)據(jù):" + info);
//5、關閉資源
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}