java—向多播端口发送单播数据包

l5tcr1uw  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(328)

我打开了一个多播套接字,正在接收多播消息。从这个线程看来,同一个多播套接字也应该能够接收单播消息。但是,我什么也得不到。
编辑:端口号似乎是问题所在。端口3702被ws-discovery用于单播,这与我正在尝试的操作有关。我正在追踪一个问题,其中客户端对服务的探测没有被服务的多播套接字捕获。我在windows上运行这个。
我的多播服务器:

  1. class Server extends Thread {
  2. MulticastSocket multicastSocket;
  3. final Logger LOG;
  4. final int PORT = 3702;
  5. final String MULTICAST_ADDR = "239.255.255.250";
  6. InetAddress multicastGroup;
  7. public Server() {
  8. LOG = Logger.getLogger("Server");
  9. try {
  10. multicastGroup = InetAddress.getByName(MULTICAST_ADDR);
  11. multicastSocket = new MulticastSocket(PORT);
  12. multicastSocket.setInterface(InetAddress.getLocalHost());
  13. multicastSocket.joinGroup(multicastGroup);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. @Override
  19. public void run() {
  20. while (!Global.exit) {
  21. byte[] buf = new byte[1000];
  22. DatagramPacket recv = new DatagramPacket(buf, buf.length);
  23. try {
  24. multicastSocket.receive(recv);
  25. String msg = new String(recv.getData(), StandardCharsets.UTF_8);
  26. LOG.log(Level.INFO, "got: " + msg);
  27. } catch (IOException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

客户代码:

  1. public void directMsgTest(){
  2. try {
  3. DatagramSocket datagramSocket = new DatagramSocket( 8080,InetAddress.getLocalHost());
  4. String msg = "direct msg";
  5. byte[] buf = msg.getBytes();
  6. DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), DST_PORT);
  7. datagramSocket.send(packet);
  8. datagramSocket.close();
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题