java - Java中的Netcat通信

标签 java sockets unix nagios netcat

我正在尝试建立从 Java 应用程序到服务器的连接。我可以通过在 shell 中输入来从服务器获取数据:

cat query.txt | nc server port

现在,我正在尝试在 Java 中做同样的事情。我已经尝试过一些第三方 API,例如 jetcat。服务器应该也可以通过 Unix 套接字访问,但目前我无法获得连接。

标准 Java 套接字也不起作用。当我发送查询时,服务器从未响应。

public class Server {
    private Socket socket;
    
    public Server(String url, int port) throws UnknownHostException, IOException {
        socket = new Socket(url, port);
    }
    
    void sendMessage(String nachricht) throws IOException {     
        PrintWriter printWriter = new PrintWriter( new OutputStreamWriter(socket.getOutputStream()));
        printWriter.print(nachricht);
        printWriter.flush();
    }
    
    public void read() throws IOException {
        Thread t = new Thread(new Runnable() {
             public void run() {
                    try {         
                        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                        char[] buffer = new char[200];
                        int anzahlZeichen = bufferedReader.read(buffer, 0, 200); // blockiert bis Nachricht empfangen 
                        System.out.println(new String(buffer, 0, anzahlZeichen));
                    } catch(IOException e) {
                        e.printStackTrace();                 
                  }
             }
        });  
        t.start();}}

该系统是基于Nagios并使用LQL(Livestatus查询语言)的Check_MK

有什么想法如何在 Java 中使用 netcat - 或者 netcat 的任何替代品吗?

最佳答案

您可以从 Java 运行程序,包括 netcat。请参阅Runtime.exec() .

netcat 只是一个打开套接字、写入数据并从中读取数据的程序。您可以直接在 Java 中执行此操作(打开套接字、写入并读取),而无需处理管道和子进程。将您使用 java.io.Socket 编写的 Java 程序添加到您的问题中。我的第一个猜测是你没有设置 TCP_NODELAY标记和/或没有刷新缓冲流,因此服务器没有收到您的请求。

<小时/>

创建套接字后,尝试设置 TCP_NODELAY: socket.setTcpNoDelay(true);

使用Wireshark或类似的方法来捕获网络流量并查看您的消息是否确实发送到服务器。

关于java - Java中的Netcat通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269870/

相关文章:

java - 如何在不使用任何服务器的情况下向特定用户发送USSD消息?

java - 虽然我没有指定,但为什么会生成 table_seq

java - 使用 XSL 进行 XML 转换

java - JMS 读取消息 MalformedInputException

python - 分布式本地聊天服务器

c# - Socket.Blocking 的目的

linux - linux 命令末尾的 "&"是什么意思?

c++ - 什么会导致连接卡在 close_wait 状态

java - Java中的垃圾收集静态变量

bash - 通过连接的第一列连接 3 个文件(是 awk)?