UDP网络编程

用户数据报协议(UDP)Java软件的DatagramSocketDatagramPacket类支持。包是自包含的消息,它包括有关发送方、消息长度和消息自身。

下面两个类是其中比较重要的类,我拿出来说一下

1,DatagramPacket有两个构造函数:一个用来接收数据,另一个用来发送数据:DatagramPacket(byte [] recvBuf, int readLength):用来建立一个字节数组以接收UDP包。byte数组在传递给构造函数时是空的,而int值用来设定要读取的字节数(不能比数组的大小还大)。

DatagramPacket(byte [] sendBuf, int sendLength, InetAddress iaddr, int iport):用来建立将要传输的UDP包。sendLength 不应该比sendBuf字节数组的大小要大

2,DatagramSocket用来读写UDP包。这个类有三个构造函数,允许你指定要绑定的端口号和internet地址:DatagramSocket()-绑定本地主机的所有可用端口。DatagramSocket(int port)-绑定本地主机的指定端口。DatagramSocket(int port, InetAddress iaddr)-绑定指定地址的指定端口。

 

UDP服务器端代码的实现:

UDP服务器在8888端口监听客户的请求。当它从客户接收到一个DatagramPacket时,它发送服务器上的当前时间。

import java.io.*;

       import java.net.*; 

       import java.util.*; 

   

       public class UdpServer{ 

   

          

           public byte[] getTime(){ 

               Date d= new Date(); 

              return d.toString().getBytes(); 

          

  

         public void go() throws IOException { 

 

              DatagramSocket datagramSocket; 

              DatagramPacket inDataPacket;  

              DatagramPacket outDataPacket;

              InetAddress clientAddress;

              int clientPort;  

              byte[] msg= new byte[10];  

              byte[] time;  

  

              

              datagramSocket = new DatagramSocket(8888);                

              while(true) {              

                  inDataPacket = new DatagramPacket(msg, msg.length);                   

                  datagramSocket.receive(inDataPacket);               

                  clientAddress = inDataPacket.getAddress(); 

                  clientPort = inDataPacket.getPort();                  

                  time = getTime();                   

                outDataPacket = new DatagramPacket 

                    (time, time.length, clientAddress, clientPort);                  

                  datagramSocket.send(outDataPacket); 

             

          

 

          public static void main(String args[]) { 

              UdpServer udpServer = new UdpServer(); 

              try { 

                  udpServer.go(); 

              } catch (IOException e) {                  

                  System.out.println (e); 

                  System.exit(1); 

              

          

      }

 

UDP客户端代码的实现: 

---end--

UDP客户向前面创建的客户发送一个空包并接收一个包含服务器实际时间的包。

import java.io.*;

import java.net.*; 

 

  public class UdpClient { 

   

      public void go() throws IOException, UnknownHostException { 

           DatagramSocket datagramSocket; 

           DatagramPacket outDataPacket; 

           DatagramPacket inDataPacket;   

          InetAddress serverAddress;     

          byte[] msg = new byte[1000];  

          String receivedMsg;             

          datagramSocket = new DatagramSocket();                        

          serverAddress = InetAddress.getLocalHost();           

          outDataPacket = new DatagramPacket(msg, 1, serverAddress, 8888);             

         datagramSocket.send(outDataPacket);             

         inDataPacket = new DatagramPacket(msg, msg.length);            

          datagramSocket.receive(inDataPacket);             

          receivedMsg = new String 

            (inDataPacket.getData(), 0, inDataPacket.getLength()); 

          System.out.println(receivedMsg); 

  

         

          datagramSocket.close(); 

      

  

      public static void main(String args[]) { 

        UdpClient udpClient = new UdpClient(); 

          try { 

            udpClient.go(); 

          } catch (Exception e) {  

              System.out.println (e); 

              System.exit(1); 

          

     

  

 

转载注明出处:http://blog.csdn.net/ecorefeng

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值