45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 编程代码 > 阅读资讯:java版本的飞鸽编写的内容介绍

java版本的飞鸽编写的内容介绍

2016-08-30 06:54:34 来源:www.45fan.com 【

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;
}


}

下一贴我们讲介绍

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

形成相应的图形化界面

 

本文地址:http://www.45fan.com/bcdm/69618.html
Tags: 版本 Java 飞鸽
编辑:路饭网
推广内容
推荐阅读
热门推荐
推荐文章
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部