[問題] 如何避免自己收到自己發出的訊息 (群播)

看板java作者 (Rex)時間17年前 (2008/11/12 02:29), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
想請問大大們, 我寫一隻使用 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
XD 自己找到答案了 mSocket.setLoopbackMode(true);
11/12 08:29, 1F
文章代碼(AID): #196Sy2ma (java)