[問題] 如何避免自己收到自己發出的訊息 (群播)
想請問大大們,
我寫一隻使用 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
→
11/12 08:29, , 1F
11/12 08:29, 1F