import?java.net.DatagramPacket;
import?java.net.InetAddress;
import?java.net.MulticastSocket;
import?java.util.Scanner;
//這是一個用udp接收廣播的程序
public?class?UDPclien?{
int?port=6666;
boolean?b=false;
Thread?thread=null;
//以下是建立7788的,本來這里調(diào)用了循環(huán),我放到run方法里面去了
private?void?Receiver(InetAddress?group)?throws?Exception?{
byte?data[]=new?byte[1024];
DatagramPacket?packet=new?DatagramPacket(data,?data.length,group,port);
MulticastSocket?socket=new?MulticastSocket(port);
socket.joinGroup(group);
socket.receive(packet);
String?s=new?String(packet.getData());
System.out.println(s);
}
//把runnable對象獨立出來了,這里調(diào)用了循環(huán)
private?Runnable?getRun()?{
Runnable?runnable=new?Runnable()?{
public?void?run()?{
try?{
InetAddress?group=InetAddress.getByName("224.255.10.0");
while(true)?{
Receiver(group);
if(b==true)?{
break;
}
}
}?catch?(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
};
return?runnable;
}
//這里建立收聽廣播的線程
private?void?action(int?a)?{
if(a==1)?{
if(thread==null)?{
thread=new?Thread(getRun());thread.start();
}
else?if(!(thread.isAlive())){
thread=new?Thread(getRun());thread.start();
}
else?{
b=false;
thread.run();//嘗試過在這里加上循環(huán),也沒用
}
}
else?if(a==0)?{
b=true;
}
else?{}
}
private?void?seta(int?a)?{
action(a);
}
public?static?void?main(String[]?args)?{
UDPclien?clien=new?UDPclien();
Scanner?in=new?Scanner(System.in);
Thread?thread=new?Thread(new?Runnable()?{
public?void?run()?{
while(true)?{
int?a=in.nextInt();
if(a==2)?{
break;
}
clien.seta(a);
}
}
});
thread.start();
}
}我另外寫了一個代碼不斷的發(fā)送廣播,沒有問題。這個代碼,輸入1可以一直接收廣播,輸入0會結(jié)束,但是再次輸入1就只會執(zhí)行一次。感覺不應(yīng)該啊,我嵌套的好幾次while死循環(huán)都不能實現(xiàn)再次啟動,求大神指點
1 回答

添加回答
舉報
0/150
提交
取消