我正在尝试建立从 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/