通过 Java 套接字侦听端口

2022-09-01 15:34:19

我的客户端与之通信的服务器软件定期在端口 4000 上发送事务消息。我需要将这些消息逐行打印到控制台。(最终,我将不得不将这些值写入表,但我将其保存以供以后使用。

我尝试了这段代码,但它没有输出任何东西:

package merchanttransaction;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MerchantTransaction {
    public static void main(String[] args) {
        try {
            InetAddress host = InetAddress.getLocalHost();
            Socket socket = new Socket("192.168.1.104", 4000);
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            String message = (String) ois.readObject();
            System.out.println("Message: " + message);

            ois.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

顺便说一句,我需要能够监视该端口,直到程序终止。我不确定上面的代码是否能够做到这一点,因为我没有看到代码的任何迭代。

我使用的是在Ubuntu上运行的Java版本1.6.0_24,SE运行时环境(build 1.6.0_24-b07)。


答案 1

您需要使用 .您可以在此处找到解释。ServerSocket


答案 2

您真正想要实现的目标是什么?您的代码所做的是尝试连接到位于 的服务器。这是发送消息的服务器的地址吗(因为这看起来像客户端代码)?如果我在本地运行假服务器:192.168.1.104:4000

$ nc -l 4000

...并将套接字地址更改为 ,它将起作用并尝试从创建的服务器读取某些内容。localhost:4000nc

你可能想要的是创建一个并倾听它:ServerSocket

ServerSocket serverSocket = new ServerSocket(4000);
Socket socket = serverSocket.accept();

第二行将阻塞,直到端口 4000 上的其他软件连接到您的计算机。然后,您可以从返回的套接字中读取。看看本教程,这实际上是一个非常广泛的主题(线程,协议...


推荐