Socket编程---使用无连接的数据报(UDP) 进行通信(转)

使用无连接的数据报(UDP) 进行通信

什么是Datagram?
数据报是网上传输的独立数据包 ,数据报是否能正确地到达目的地,到达的时间,顺序,内容的正确性均没有保障。
 
java中使用Datagram与DatagramPacket类
DatagramSocket类利用UDP协议来实现客户与服务器的Socket.
send():发送数据报
receive(): 接收数据报

 

 以下为流程

 



 

 

 

以下为简单示例,不含一些异常处理、判空处理。

 

一、服务器端

Java代码  收藏代码
  1. package com.network;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.DatagramSocket;  
  5. import java.net.InetAddress;  
  6.   
  7. public class UDPServer  
  8. {  
  9.   
  10.     public static void main(String[] args)throws Exception  
  11.     {  
  12.         DatagramSocket datagramSocket = new DatagramSocket(5678);  
  13.           
  14.         byte[] buffer = new byte[100];  
  15.           
  16.         DatagramPacket packet = new DatagramPacket(buffer,100);  
  17.           
  18.         datagramSocket.receive(packet);  
  19.           
  20.         byte[] data = packet.getData();  
  21.           
  22.         int i = packet.getLength();  
  23.           
  24.         String content = new String(data,0,i);  
  25.           
  26.         System.out.println("content from client : " + content);  
  27.           
  28.         int length = content.length();  
  29.           
  30.         String strLength = String.valueOf(length);  
  31.           
  32.         byte[] b = strLength.getBytes();  
  33.           
  34.         InetAddress address = packet.getAddress();  
  35.           
  36.         int port = packet.getPort();  
  37.           
  38.         DatagramPacket packet2 = new DatagramPacket(b,b.length,address,port);  
  39.           
  40.         System.out.println("length: " + new String(b,0,b.length));  
  41.           
  42.         datagramSocket.send(packet2);  
  43.           
  44.         datagramSocket.close();  
  45.           
  46.           
  47.     }  
  48.   
  49. }  

 

 

 

二、客户端

 

Java代码  收藏代码
  1. package com.network;  
  2.   
  3. import java.net.DatagramPacket;  
  4. import java.net.DatagramSocket;  
  5. import java.net.InetAddress;  
  6.   
  7. public class UDPClient  
  8. {  
  9.     public static void main(String[] args) throws Exception  
  10.     {  
  11.         DatagramSocket datagramSocket = new DatagramSocket();  
  12.           
  13.         String content = "hello world!";  
  14.           
  15.         byte[] buffer = content.getBytes();  
  16.           
  17.         InetAddress address = InetAddress.getByName("localhost");  
  18.           
  19.         DatagramPacket packet = new DatagramPacket(buffer,buffer.length,address,5678);  
  20.           
  21.         datagramSocket.send(packet);  
  22.           
  23.         byte[] b = new byte[100];  
  24.           
  25.         DatagramPacket packet2 = new DatagramPacket(b,100);  
  26.           
  27.         datagramSocket.receive(packet2);  
  28.           
  29.         byte[] b2 = packet2.getData();  
  30.           
  31.         int l = packet2.getLength();  
  32.           
  33.         String str = new String(b2,0,l);  
  34.           
  35.         System.out.println("length of string : " + str);  
  36.           
  37.         datagramSocket.close();  
  38.     }  
  39. }  

posted on 2012-02-11 13:47  喔、勒勒  阅读(638)  评论(0编辑  收藏  举报