作者henry035 (Rex)
看板java
标题[问题] 如何避免自己收到自己发出的讯息 (群播)
时间Wed Nov 12 02:29:21 2008
想请问大大们,
我写一只使用 MulticastSocket 传讯息与收讯息的程式
但是自己会收到自己发送出去的讯息
想请问要如何解决呢?
(由於传送与接收需要同一个Port,所以撇除使用不同port的方法。)
我是将收讯息的写成执行绪,传送则是要传才使用的function
我有试过将传讯息与收讯息写在两只不同的程式
但依然会发生自己收到自己发送出去的讯息。
奇怪的是,如果把 <?> 标记的两行注解拿掉(26、27行)
就是 sendIP()里面也写一次
group = InetAddress.getByName("224.1.1.1");
mSocket = new MulticastSocket(port); // <要求MSG>
结果这种自己收到自己送出的讯息问题,只会发生一次
import java.io.*;
import java.net.*;
public class test extends Thread {
InetAddress group;
MulticastSocket mSocket;
DatagramPacket packReceive,packSend;
int port = 7777;
public test(){
try{
// 设定群播IP与MulticastSocket
group = InetAddress.getByName("224.1.1.1");
mSocket = new MulticastSocket(port);
// 加入群播群组(接受群播封包用)
mSocket.joinGroup(group);
this.start();
}catch(Exception e){
System.out.println(e);
}
}
public void sendIP(){
try{
// 设定群播IP与MulticastSocket
//<?> group = InetAddress.getByName("224.1.1.1");
//<?> mSocket = new MulticastSocket(port); // <要求MSG>
// 测试用:传本机IP
String str = InetAddress.getLocalHost().
getHostAddress().toString();
str += "\n";
System.out.println("\n送出>>");
System.out.print(str);
byte data[] = str.getBytes("UTF8");
packSend = new DatagramPacket(data,data.length,
group,port);
mSocket.send(packSend);
}catch(Exception e){
System.out.println(e);
}
}
public void run(){
try{
while(true){
byte data[] = new byte[1024];
// 准备接收封包(MSG)
packReceive = new DatagramPacket(data,
data.length,group,port);
// Retrieve datagram data
mSocket.receive(packReceive);
System.out.println("\n收到>>");
int size=0;
// ======= 处理封包结尾 =======
for(int i=0;i<data.length;i++){
if(data[i]==0){
size = i;
break;
}
}
String str = new String(data,0,size,"UTF8");
System.out.println(str);
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main (String[] args) throws IOException{
test t = new test();
t.sendIP();
t.sendIP();
t.sendIP();
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.18.7
1F:→ henry035:XD 自己找到答案了 mSocket.setLoopbackMode(true); 11/12 08:29