java使用UDP协议传输数据

http://blog.csdn.net/awj3584/article/details/24714515


UDP协议(User Datagram Protocol,用户数据报协议)不同于TCP协议,它是不可能靠的,但是它比TCP协议具有更快的传输速度,UDP发送的数据单元称为数据报,当网络传输UDP传输UDP数据报是无法保证数据能够到达目的地,也无法保证按发送的顺序到达目的地,也就是说先发送了“hello”,再发送了“world”,但接收方可能会先收到“world”,再收到“hello”,也有可能收不到数据,为什么呢?因为它是不可能靠的,在传输途中可能丢失了。但UDP比TCP跟适合与传输实时音频。下面是一个简单的UPD传输数据报的例子

服务器端:

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.SocketException;  
  5.   
  6. public class EchoServer {  
  7.       
  8.     private DatagramSocket datagramSocket;  
  9.       
  10.     private final int port = 8088;  
  11.       
  12.     public static void main(String[] args) throws SocketException {  
  13.         new EchoServer().service();  
  14.     }  
  15.       
  16.     public EchoServer() throws SocketException{  
  17.         datagramSocket = new DatagramSocket(port);  
  18.         System.out.println("服务器启动");  
  19.     }  
  20.       
  21.     public String echo(String msg){  
  22.         return "echo:"+msg;  
  23.     }  
  24.       
  25.     public void service(){  
  26.         while (true) {  
  27.             try {  
  28.                 DatagramPacket packet = new DatagramPacket(new byte[512], 512);  
  29.                 datagramSocket.receive(packet);  
  30.                 String msg = new String(packet.getData(), 0, packet.getLength());  
  31.                 System.out.println(packet.getAddress()+"/"+packet.getPort()+" msg:"+msg);  
  32.                 packet.setData(echo(msg).getBytes());  
  33.                 datagramSocket.send(packet);  
  34.             } catch (IOException e) {  
  35.                 e.printStackTrace();  
  36.             }  
  37.               
  38.         }  
  39.     }  
  40.   
  41. }  

客户端:

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.net.DatagramPacket;  
  5. import java.net.DatagramSocket;  
  6. import java.net.InetAddress;  
  7. import java.net.SocketException;  
  8.   
  9. public class EchoClient {  
  10.   
  11.     private String remoteHost="localhost";  
  12.     private int remotePort=8088;  
  13.     private DatagramSocket datagramSocket;  
  14.       
  15.     public EchoClient() throws SocketException{  
  16.         datagramSocket = new DatagramSocket();  
  17.     }  
  18.       
  19.     public static void main(String[] args) throws SocketException {  
  20.         new EchoClient().talk();  
  21.     }  
  22.   
  23.     public void talk(){  
  24.         try {  
  25.             BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
  26.             String msg = null;  
  27.             InetAddress address = InetAddress.getByName(remoteHost);  
  28.             while ((msg=reader.readLine())!=null) {  
  29.                 //发送数据报  
  30.                 byte [] buffer = msg.getBytes();  
  31.                 DatagramPacket packet = new DatagramPacket(buffer,buffer.length, address, remotePort);  
  32.                 datagramSocket.send(packet);  
  33.                 //接收数据报  
  34.                 DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512);  
  35.                 datagramSocket.receive(inputPacket);  
  36.                 System.out.println(new String(inputPacket.getData(), 0 , inputPacket.getLength()));  
  37.                 if("bye".equals(msg)){  
  38.                     break;  
  39.                 }  
  40.             }  
  41.   
  42.         } catch (IOException e) {  
  43.             e.printStackTrace();  
  44.         }finally{  
  45.             datagramSocket.close();  
  46.         }  
  47.     }  
  48.   
  49. }  

你可能感兴趣的:(java使用UDP协议传输数据)