Java网络教程 - Java网络UDP服务器
以下代码显示了如何编写UDP回显服务器:
DatagramSocket socket = new DatagramSocket(12345); DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); while(true) {// Receive the packet socket.receive(packet);//Send back the same packet to the sender socket.send(packet); }
Echo 服务器
基于UDP套接字的Echo服务器
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;public class Main {public static void main(String[] args) throws Exception {final int LOCAL_PORT = 12345;final String SERVER_NAME = "localhost";DatagramSocket udpSocket = new DatagramSocket(LOCAL_PORT,InetAddress.getByName(SERVER_NAME));System.out.println("Created UDP server socket at "+ udpSocket.getLocalSocketAddress() + "...");while (true) {System.out.println("Waiting for a UDP packet...");DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);udpSocket.receive(packet);displayPacketDetails(packet);udpSocket.send(packet);}}public static void displayPacketDetails(DatagramPacket packet) {byte[] msgBuffer = packet.getData();int length = packet.getLength();int offset = packet.getOffset();int remotePort = packet.getPort();InetAddress remoteAddr = packet.getAddress();String msg = new String(msgBuffer, offset, length);System.out.println("Received a packet:[IP Address=" + remoteAddr+ ", port=" + remotePort + ", message=" + msg + "]");} }
上面的代码生成以下结果。
Echo 客户端
基于UDP套接字的Echo客户端
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException;public class Main {public static void main(String[] args) throws Exception {DatagramSocket udpSocket = new DatagramSocket();String msg = null;BufferedReader br = new BufferedReader(new InputStreamReader(System.in));System.out.print("Please enter a message (Bye to quit):");while ((msg = br.readLine()) != null) {if (msg.equalsIgnoreCase("bye")) {break;}DatagramPacket packet = Main.getPacket(msg);udpSocket.send(packet);udpSocket.receive(packet);displayPacketDetails(packet);System.out.print("Please enter a message (Bye to quit):");}udpSocket.close();}public static void displayPacketDetails(DatagramPacket packet) {byte[] msgBuffer = packet.getData();int length = packet.getLength();int offset = packet.getOffset();int remotePort = packet.getPort();InetAddress remoteAddr = packet.getAddress();String msg = new String(msgBuffer, offset, length);System.out.println("[Server at IP Address=" + remoteAddr + ", port="+ remotePort + "]: " + msg);}public static DatagramPacket getPacket(String msg)throws UnknownHostException {int PACKET_MAX_LENGTH = 1024;byte[] msgBuffer = msg.getBytes();int length = msgBuffer.length;if (length > PACKET_MAX_LENGTH) {length = PACKET_MAX_LENGTH;}DatagramPacket packet = new DatagramPacket(msgBuffer, length);InetAddress serverIPAddress = InetAddress.getByName("localhost");packet.setAddress(serverIPAddress);packet.setPort(15900);return packet;} }
上面的代码生成以下结果。