Java监听端口

3
我们希望捕获进入系统的数据,例如在端口7777上。
public static void main(String[] args) {
        try {
            final ServerSocket serverSocket = new ServerSocket(7777);
            new Thread("Device Listener") {
                public void run() {
                    try {
                        System.out.println("Listener Running . . .");
                        Socket socket = null;
                        while ((socket = serverSocket.accept()) != null) {
                            System.out.println("| Incoming : "+ socket.toString());
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                };
            }.start();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

我们有一个设备,它会向端口7777发送数据,并配有一个原生的Windows应用程序。Windows原生应用程序会接收来自该设备的数据。我们需要通过我们的Java项目在端口7777上接收该数据。
在上述代码中:
  1. Java服务器套接字已创建,但未从设备接收任何传入连接。

  2. Java服务器套接字正在从telnet命令接收连接。

  3. 设备和其他原生应用程序使用的数据格式可能不同,但至少必须从Java服务器套接字连接。这是正确的吗?

  4. 如何接收传输到端口7777的数据。

编辑:
好的,使用UDP套接字接收数据。长度为68。设备文档没有指定捕获此数据的方法,因为它可能设计为与指定的应用程序一起使用。我们也无法联系制造商。是否有任何方法(如果可能)可以知道传入字节的格式。我们尝试了网络嗅探器,但我们无法理解格式。
2个回答

5
如果你正在使用telnet命令接收信息,那么我怀疑你可能有一个与网络相关的问题。
1.可能你的设备没有和你配置telnet使用的同一IP地址/主机名通信
2.你可能存在路由或防火墙问题
3.你的设备可能在使用UDP而不是TCP?

谢谢,这是UDP端口。 - CSR
@user2463026 如果这是一个UDP端口,为什么你要尝试使用TCP的“ServerSocket”? - user207421
不,后来我用DatagramSocket套接字更改了我的代码。 - CSR

3

Java服务器套接字已创建,但未从设备接收到传入连接。

因此,可能存在防火墙或设备未尝试连接该端口。

Java服务器套接字正在从telnet命令接收连接。

因此,Java应用程序正在侦听该端口。

使用的数据格式可能与设备和其他本地应用程序使用的格式不同,但至少必须从Java服务器套接字连接。是正确的吗?

是的。

如何接收发送到端口7777的数据。

首先,您必须接受连接。根据这里的证据,设备根本没有连接到端口7777。建议进行一些网络嗅探以查看它实际上正在做什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接