【问题标题】:Java Listening to a UDP portJava 监听 UDP 端口
【发布时间】:2019-08-28 22:05:49
【问题描述】:

我想监听一个 UDP 端口来接收它在wireshark 中传输的信息,它看起来像这样

我发现的只是人们创建 ServerSockets,但是当我尝试时,我没有从控制台获得任何输出。

package me.xenopyax.albionmarket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {

    public static void main(String[] args) throws IOException {

        DatagramSocket serverSocket = new DatagramSocket(5056);
        byte[] receiveData = new byte[1024];
        byte[] sendData = new byte[1024];
        while(true)
            {
          DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
          serverSocket.receive(receivePacket);
          String sentence = new String( receivePacket.getData());
          System.out.println("RECEIVED: " + sentence);
          InetAddress IPAddress = receivePacket.getAddress();
          int port = receivePacket.getPort();
          String capitalizedSentence = sentence.toUpperCase();
          sendData = capitalizedSentence.getBytes();
          DatagramPacket sendPacket =
          new DatagramPacket(sendData, sendData.length, IPAddress, port);
          serverSocket.send(sendPacket);
       }

    }

}

我是否正确使用 ServersSockets 来监听端口。还是我做错了什么?

【问题讨论】:

  • 您是否考虑过查阅文档? ServerSocket 用于 TCP。
  • 为什么我在搜索“listening on UDP port java”时总是看到使用了ServerSockets?
  • 当我搜索(Google)“侦听 UDP 端口 java”时,这不是我得到的。
  • 更新了代码,但还是不行……
  • @XenoPyax 如果这真的是你发现的,那是因为你使用了错误的术语。 ServerSockets 听。 UDP 套接字接收。

标签: java networking


【解决方案1】:

正如 cmets 所说,ServerSocket 用于基于流的协议,而 UDP 不是基于流的协议。你需要使用DatagramSocket来读取UDP数据包。

但是,DatagramSocket 只能用于读取发往当前机器的 UDP 数据包……一种或另一种方式。

这与 Wireshark 的做法不符。实际上,Wireshark

  • 接收原始网络数据包(在 ISO 第 2 层)也就是 IP 数据包,并且
  • 通常会将 NIC 置于“混杂”模式,以便它可以拾取未发送到主机的数据包。

你不能使用 Java SE 库来做这些事情,但是有一些第三方的替代方案;例如

【讨论】:

  • 前段时间我以某种方式实现了它,从 UDP 端口上的数据包中读取了十六进制代码
  • 我对此表示怀疑。但是如果你说你以前做过,我建议你再做一次,就像你第一次做一样:-)。如果您需要有关代码的帮助,请将其包含在问题本身中......作为文本,而不是屏幕截图。
  • 如果您需要代码方面的帮助,请将其放在问题中。不是图片链接或 pastebin 链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2017-05-10
相关资源
最近更新 更多