UDP多线程Java具体代码实现演示
客户端
import java.net.*;
import java.io.*;
public class UDPClient{
public static void main(String args[]){
// args give message contents and server hostname
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = null;
InetAddress aHost = InetAddress.getByName("127.0.0.1");
int serverPort = 6789;
System.out.println("Connecting to Server");
while ((line = bufferedReader.readLine()) != null){
byte[] m = line.getBytes();
DatagramPacket request = new DatagramPacket(m, m.length, aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer, buffer.length);
aSocket.receive(reply);
System.out.println("Reply from Server: " + new String(reply.getData()));
}
} catch (SocketException e){
System.out.println("Socket: " + e.getMessage());
} catch (IOException e){
System.out.println("IO: " + e.getMessage());
} finally {
if(aSocket != null) aSocket.close();
}
}
}
服务端
import java.net.*;
import java.io.*;
public class MultiThreadUDPServer {
public static void main(String[] args) throws Exception {
DatagramSocket aSocket = new DatagramSocket(6789);
int count = 0;
System.out.println("Server is waiting for request...");
while (true){
byte[] buffer = new byte[1000];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, aSocket.getInetAddress(), 6789);
aSocket.receive(request);
UDPServerThread udpServerThread = new UDPServerThread(aSocket, request);
udpServerThread.start();
count ++;
System.out.println("The total number of clients is " + count);
}
}
}
服务端线程段
import java.net.*;
import java.io.*;
public class UDPServerThread extends Thread{
DatagramSocket aSocket;
DatagramPacket aPacket;
public UDPServerThread(DatagramSocket aSocket, DatagramPacket aPacket){
this.aSocket = aSocket;
this.aPacket = aPacket;
}
public void run(){
String info = null;
try {
info = new String(aPacket.getData(), 0, aPacket.getLength());
System.out.println("The Client's info is : " + info);
DatagramPacket reply = new DatagramPacket(aPacket.getData(), aPacket.getLength(), aPacket.getAddress(), aPacket.getPort());
aSocket.send(reply);
} catch (IOException e) {
e.printStackTrace();
}
}
}