java版本的飞鸽编写(二)

上篇讲到了,接收到了广播包,应该如何去做

因为不知道用户什么时候发送广播包

所以也要用个线程来不断的监听广播端口

当收到一个请求包后,将自己的信息反馈给发送者

现在就讲用户如何发送广播包

我定义了一个发送消息的一个类(Sendmes)

这个类有两个构造方法

默认的构造方法发送广播包

有参数的构造方法Sendmes(byte[] ip,byte data[])

其中IP表示接收者的IP地址,data表示将要发送的数据

源代码如下

//用来发送短信息
//端口9001为信息发送端口
//端口9000为信息接收端口
//端口8888为广播发送端口
//端口8889为广播接收端口
//默认构造方法是发送广播包

 

import java.net.*;
import java.io.*;


class Sendmes{

   DatagramSocket trans;
   DatagramPacket udpmess;
   InetAddress addre;
   byte[] ip= new byte[4];  //存储接收方的IP地址
   byte[] data=new byte[300];//存储用户发送的信息,最大信息长度为300字节
   byte[] data1={1,1,1,1,1}; //发送广播包里的信息为全"1"
  
     
   Sendmes(){
 
     try{
         trans= new DatagramSocket(8880);
     }catch(SocketException e){
                              System.out.println ("无法打开端口");
                              new Newmess("无法打开端口");
                              }
     try{
         addre=InetAddress.getLocalHost();
             ip=Convert(addre.getHostAddress());  //获取自己所在局域网的IP,好自适应形成对应的广播地址
         switch(ip[0])     //自适应过程
         {
          case 10: ip[1]=(byte)255;
                   ip[2]=(byte)255;
                   ip[3]=(byte)255;
                   break;
          case (byte)172:ip[2]=(byte)255;
                         ip[3]=(byte)255;
                         break;
          case (byte)192:ip[2]=(byte)255;
                         ip[3]=(byte)255;
                         break;
             
                 
         }
        
         addre= InetAddress.getByAddress(ip);
        
             }catch(UnknownHostException e){
                                  System.out.println ("找不到目的主机");
                                   new Newmess("找不到目的主机");
                                 }
    
     udpmess = new DatagramPacket(data1,5,addre,8889);                     
     try{
           trans.send(udpmess);   //发送消息
        
       }catch(IOException e){
                           System.out.println ("数据传输错误");
                           System.out.println (e.getMessage());
                          }
     trans.close();
                                
   }
  
   //参数ip为接收方的IP地址,data为发送的数据
   //从本机的9001端口出去,发送到目的方的9000端口
   Sendmes(byte[] ip,byte data[]){
  
     this.ip=ip;
     this.data=data;
    
     try{
         trans= new DatagramSocket(9001);  
     }catch(SocketException e){
                               System.out.println ("无法打开端口");
                             
                              }
     try{
         addre= InetAddress.getByAddress(ip);
     }catch(UnknownHostException e){
                                  System.out.println ("找不到目的主机");
                             
                                 }
    
     udpmess = new DatagramPacket(data,data.length,addre,9000);                     
     try{
           trans.send(udpmess);
         
       }catch(IOException e){
                           System.out.println ("数据传输错误");
                          
                          }
     trans.close();
                                
   }
  
  
    byte[] Convert(String temp){     //将IP地址转换为byte[]数组里面去
     byte[] b=new byte[4];
     int i,j,k;
     for(i=0,j=0,k=0;i<temp.length();i++){
         if(temp.charAt(i)=='.'){
            b[k++]=(byte)Integer.parseInt(temp.substring(j,i));
            j=i+1;
         }
         if(k==3) break;
        }
        b[k]=(byte)Integer.parseInt(temp.substring(j,temp.length()));
        return b;
    }
 
  
}

下一贴我们讲介绍

如何根据广播包后收到的反馈信息

形成相应的图形化界面

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值