使用DatagramSocket发送、接收数据(2)---server端

转载:http://book.51cto.com/art/201203/322542.htm   (疯狂Java讲义---李刚)


下面程序使用DatagramSocket实现了Server/Client结构的网络通信。本程序的服务器端使用循环1000次来读取DatagramSocket中的数据报,每当读取到内容之后便向该数据报的发送者送回一条信息。服务器端程序代码如下。

程序清单:codes\17\17.4\UdpServer.java


 
 
  1. public class UdpServer  
  2. {  
  3.     public static final int PORT = 30000;  
  4.     // 定义每个数据报的最大大小为4KB  
  5.     private static final int DATA_LEN = 4096;  
  6.     // 定义接收网络数据的字节数组  
  7.     byte[] inBuff = new byte[DATA_LEN];  
  8.     // 以指定字节数组创建准备接收数据的DatagramPacket对象  
  9.     private DatagramPacket inPacket =   
  10.         new DatagramPacket(inBuff , inBuff.length);  
  11.     // 定义一个用于发送的DatagramPacket对象  
  12.     private DatagramPacket outPacket;  
  13.     // 定义一个字符串数组,服务器端发送该数组的元素  
  14.     String[] books = new String[]  
  15.     {  
  16.         "疯狂Java讲义",  
  17.         "轻量级Java EE企业应用实战",  
  18.         "疯狂Android讲义",  
  19.         "疯狂Ajax讲义"  
  20.     };  
  21.     public void init()throws IOException  
  22.     {  
  23.         try(  
  24.             // 创建DatagramSocket对象  
  25.             DatagramSocket socket = new DatagramSocket(PORT))  
  26.         {  
  27.             // 采用循环接收数据  
  28.             for (int i = 0; i < 1000 ; i++ )  
  29.             {  
  30.                 // 读取Socket中的数据,读到的数据放入inPacket封装的数组里  
  31.                 socket.receive(inPacket);  
  32.                 // 判断inPacket.getData()和inBuff是否是同一个数组  
  33.                 System.out.println(inBuff == inPacket.getData());  
  34.                 // 将接收到的内容转换成字符串后输出  
  35.                 System.out.println(new String(inBuff  
  36.                     , 0 , inPacket.getLength()));  
  37.                 // 从字符串数组中取出一个元素作为发送数据  
  38.                 byte[] sendData = books[i % 4].getBytes();  
  39.                 // 以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的  
  40.                 // 源SocketAddress作为目标SocketAddress创建DatagramPacket  
  41.                 outPacket = new DatagramPacket(sendData   
  42.                     , sendData.length , inPacket.getSocketAddress());  
  43.                 // 发送数据  
  44.                 socket.send(outPacket);  
  45.             }  
  46.         }  
  47.     }  
  48.     public static void main(String[] args)  
  49.         throws IOException  
  50.     {  
  51.         new UdpServer().init();  
  52.     }  
  53. }  

上面程序中的粗体字代码就是使用DatagramSocket发送、接收DatagramPacket的关键代码,该程序可以接收1000个客户端发送过来的数据。

客户端程序代码也与此类似,客户端采用循环不断地读取用户键盘输入,每当读取到用户输入的内容后就将该内容封装成DatagramPacket数据报,再将该数据报发送出去;接着把DatagramSocket中的数据读入接收用的DatagramPacket中(实际上是读入该DatagramPacket所封装的字节数组中)。客户端程序代码如下。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值