Отправка пакетов Unicast на порт Multicast

У меня открыт многоадресный сокет, и я получаю многоадресное сообщение. Из этого потока кажется, что тот же многоадресный сокет также должен иметь возможность получать одноадресную рассылку. Сообщения. Однако я ничего не могу получить.

Изменить: проблема с номером порта. Порт 3702 используется ws-discovery для одноадресной рассылки, что связано с тем, что я пытаюсь сделать. Я отслеживаю проблему, когда запрос клиента к службе не перехватывается многоадресным сокетом службы. Я запускаю это на окнах.

Мой многоадресный сервер:

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();
    }
}

person MakingHandties    schedule 10.01.2021    source источник


Ответы (1)


Кажется, что это вина окна. Он использует обнаружение WS в некоторых своих службах, таким образом, используя порт 3702 и потребляя одноадресные пакеты, отправленные на порт 3702, вместо того, чтобы передавать их моему серверу.

Я попробовал запустить это в Linux, и все было в порядке.

person MakingHandties    schedule 10.01.2021