关于冰盾 | 使用条款 | 网站地图
 
2.2.3 使用UDP通信
2.2.3 使用UDP通信
作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-02-06
 

2.2.3 使用UDP通信

UDP有不提供数据报分组、组装和不能对数据包排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多的客户端/服务器模式的网络应用都需要使用UDP协议。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。UDP传输原理示意图如图2-6所示。

UDP服务器端工作的主要步骤如下。

步骤1 调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上。

步骤2 调用DatagramPacket(byte[]buf,int length),建立一个字节数组以接收UDP包。

步骤3 调用DatagramSocket类的receive(),接受UDP包。

步骤4 关闭数据报套接字。

示例代码如下所示:

  1. // 接收的字节大小,客户端发送的数据不能超过MAX_UDP_DATAGRAM_LEN    
  2. byte[] lMsg = new byte[MAX_UDP_DATAGRAM_LEN];  
  3. // 实例化一个DatagramPacket类  
  4. DatagramPacket dp = new DatagramPacket(lMsg, lMsg.length);  
  5. // 新建一个DatagramSocket类  
  6. DatagramSocket ds = null;  
  7. try {  
  8.       // UDP服务器监听的端口    
  9.       ds = new DatagramSocket(UDP_SERVER_PORT);  
  10.       // 准备接收数据    
  11.       ds.receive(dp);  
  12. } catch (SocketException e) {  
  13.       e.printStackTrace();  
  14. } catch (IOException e) {  
  15.       e.printStackTrace();  
  16. } finally {  
  17.       // 如果ds对象不为空,则关闭ds对象  
  18.       if (ds != null) {  
  19.                 ds.close();  
  20.       }  

UDP客户端工作的主要步骤如下。

步骤1 调用DatagramSocket()创建一个数据包套接字。

步骤2 调用DatagramPacket(byte[]buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包。

步骤3 调用DatagramSocket类的send()发送UDP包。

步骤4 关闭数据报套接字。

示例代码如下所示:

  1. // 定义需要发送的信息  
  2. String udpMsg = "hello world from UDP client " + UDP_SERVER_PORT;  
  3. // 新建一个DatagramSocket对象   
  4. DatagramSocket ds = null;  
  5. try {  
  6.       // 初始化DatagramSocket对象  
  7.       ds = new DatagramSocket();  
  8.       // 初始化InetAddress对象  
  9.       InetAddress serverAddr = InetAddress.getByName("127.0.0.1");  
  10.       DatagramPacket dp;  
  11.       // 初始化DatagramPacket对象  
  12.       dp = new Datagram  
  13.       Packet(udpMsg.getBytes(), udpMsg.length(), serverAddr, UDP_SERVER_PORT);  
  14.       // 发送  
  15.       ds.send(dp);  
  16. }   
  17. // 异常处理  
  18. // Socket连接异常  
  19. catch (SocketException e) {   
  20.       e.printStackTrace();  
  21. // 不能连接到主机  
  22. }catch (UnknownHostException e) {   
  23.       e.printStackTrace();  
  24. // 数据流异常  
  25. } catch (IOException e) {   
  26.       e.printStackTrace();  
  27. // 其他异常  
  28. } catch (Exception e) {   
  29.       e.printStackTrace();  
  30. } finally {  
  31.       // 如果DatagramSocket已经实例化,则需要将其关闭  
  32.       if (ds != null) {  
  33.                 ds.close();  
  34.       }  
  35. }
 

 
最新内容:
UDP协议各方面的概念综述[2015-02-06]
UDP客户端编码解析[2015-02-06]
网络管理之TCP/UDP篇[2015-02-06]
UDP协议——数据报分发[2015-02-06]
UDP套接字的作用和特点[2015-02-06]
OSI传输层功能及协议[2015-02-06]
相关内容:

合作伙伴: 黑基网 补天科技 威盾科技 站长下载 新飞金信 北京电信 ZOL应用下载
中华人民共和国增值电信业务经营许可证京ICP备14024464 公安备案号 京1081234 
版权所有©2003-2016 冰盾防火墙  www.BingDun.com 法律声明
服务热线:(010)51661195