java版本的飞鸽编写的内容介绍
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;
}
}
下一贴我们讲介绍
如何根据广播包后收到的反馈信息
形成相应的图形化界面