簡體   English   中英

將單播數據包發送到多播端口

[英]Sending Unicast packets to a Multicast port

我打開了一個多播套接字並正在接收多播消息。 從這個線程,似乎同一個多播套接字也應該能夠接收單播消息。 但是,我什么也得不到。

編輯:端口號似乎是問題。 ws-discovery 使用端口 3702 進行單播,這與我正在嘗試做的事情有關。 我正在追蹤一個問題,即客戶端對服務的探測沒有被服務的多播套接字捕獲。 我在 windows 上運行它。

我的多播服務器:

class Server extends Thread {
MulticastSocket multicastSocket;
final Logger LOG;
final int PORT = 3702;
final String MULTICAST_ADDR = "239.255.255.250";
InetAddress multicastGroup;

public Server() {
    LOG = Logger.getLogger("Server");
    try {
        multicastGroup = InetAddress.getByName(MULTICAST_ADDR);
        multicastSocket = new MulticastSocket(PORT);
        multicastSocket.setInterface(InetAddress.getLocalHost());
        multicastSocket.joinGroup(multicastGroup);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Override
public void run() {
    while (!Global.exit) {
        byte[] buf = new byte[1000];
        DatagramPacket recv = new DatagramPacket(buf, buf.length);
        try {
            multicastSocket.receive(recv);
            String msg = new String(recv.getData(), StandardCharsets.UTF_8);
            LOG.log(Level.INFO, "got: " + msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

和客戶端代碼:

public void directMsgTest(){
    try {
        DatagramSocket datagramSocket = new DatagramSocket( 8080,InetAddress.getLocalHost());
        String msg = "direct msg";
        byte[] buf = msg.getBytes();
        DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), DST_PORT);
        datagramSocket.send(packet);
        datagramSocket.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

看來這是Window的錯。 它在其某些服務中使用 WS 發現,因此使用端口 3702 並吃發送到端口 3702 的單播數據包,而不是將其提供給我的服務器。

我嘗試在 Linux 上運行它,這很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM