UDP的应用

UDP的应用过程中主要有两个类: DatagramPacket 、DatagramSocket

具体如何用,看下面两段程序。

服务器端程序:

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPDicardServer { public final static int port = 8839; //固定端口 public final static int MAX_PACKET_SIZE = 8192;//UDP数据段中载荷的大小 public static void main(String[] args) { try { DatagramSocket server = new DatagramSocket(port); //服务器端的端口应该明确指定,这样客户端才能访问 byte[] buffer = new byte[MAX_PACKET_SIZE]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length);//服务器端的DatagramPacket while(true) { try { server.receive(packet);//这样来接收数据 System.out.println("packet.length: " + packet.getLength()); String s = new String(packet.getData(), 0, packet.getLength()); System.out.println(packet.getAddress() + " at port" + packet.getPort() + " says " + s); } catch (IOException e) { e.printStackTrace(); } } } catch (SocketException e) { e.printStackTrace(); } } }

 

客户端程序(这里的客户端是指物理机上的虚拟机,这里的物理机的IP为 10.138.4.132)

 

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class UDPDiscardClient { public static void main(String[] args) { try { InetAddress laddr = InetAddress.getByName("10.138.4.132"); DatagramSocket client = new DatagramSocket();//这里不用关心IP和端口, //IP和端口在DatagramPacket中指定 BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); while(true) { String s = userInput.readLine(); if(s.equals(".")) break; byte[] buf = s.getBytes(); //注意,下一句的 DatagramPacket构造函数中指定了 IP 和 port,这和TCP是非常不同的 DatagramPacket packet = new DatagramPacket(buf, buf.length, laddr, 8839); client.send(packet); //发送数据 } } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }

你可能感兴趣的:(UDP的应用)