UDP协议:
UDP协议传输数据是不可靠的,在java中,java.util.DatagramSocket负责接收和发送UDP数据报,java.util.DatagramPacket表示UDP数据表。每个
DatagramSocket与一个本底地址绑定,每个DatagramSocket可以把UDP数据报发送给任意一个远程DatagramSocket,也可以接收来自任意一个远程的
DatagramSocket的UDP数据报。在UDP数据报中包含了目的地址信息,DatagramSocket根据该信息把数据报发送到目的地
UDP服务端
1public class EchoServer{ 2 3 private int port = 8089; 4 private DatagramSocket socket; 5 6 public EchoServer()throws IOException{ 7 socket = new DatagramSocket(port); 8 System.out.println("服务端启动"); 9 } 10 11 public String ehco(String msg){ 12 return "ehco:"+msg; 13 } 14 15 public void service(){ 16 while(true){ 17 try { 18 //创建一个数据报对象 19 DatagramPacket packet = new DatagramPacket(new byte[512], 512); 20 socket.receive(packet);//接收来自任意一个EhcoClient的数据报 21 String msg = new String(packet.getData(), 0, packet.getLength()); 22 System.out.println(packet.getAddress()+":"+packet.getPort()+">"+msg); 23 packet.setData(ehco(msg).getBytes());//给EchoClient发送数据报 24 socket.send(packet); 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } 28 } 29 } 30 31 public static void main(String[] args) throws IOException { 32 new EchoServer().service(); 33 } 34 35}
UDP客户端
1public class EchoClient { 2 3 private String remoteHost = "localhost"; 4 private int remotePort = 8089; 5 private DatagramSocket socket; 6 7 public EchoClient() throws SocketException{ 8 socket = new DatagramSocket();//与本地任意的端口绑定 9 } 10 11 public void talk() throws IOException{ 12 try{ 13 //获取服务端ip地址 14 InetAddress remoteIP = InetAddress.getByName(remoteHost); 15 16 BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in)); 17 String msg = null; 18 while((msg = localReader.readLine()) != null){ 19 byte[] outputData = msg.getBytes(); 20 DatagramPacket outputPacket = new DatagramPacket( 21 outputData, outputData.length,remoteIP,remotePort); 22 23 socket.send(outputPacket);//发送数据报 24 25 DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512); 26 socket.receive(inputPacket);//接收EchoServer的数据报 27 System.out.println(new String(inputPacket.getData(),0,inputPacket.getLength())); 28 if(msg.equals("bye")){ 29 break; 30 } 31 } 32 }catch (Exception e) { 33 e.printStackTrace(); 34 }finally{ 35 socket.close(); 36 } 37 } 38 39 public static void main(String[] args) throws SocketException, IOException { 40 new EchoClient().talk(); 41 } 42 43}