[英]Listen to port via a Java socket
我的客戶端與之通信的服務器軟件定期在端口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運行時環境(版本1.6.0_24-b07)。
您需要使用ServerSocket
。 你可以在這里找到解釋。
你真的想要實現什么? 您的代碼所做的是嘗試連接到位於192.168.1.104:4000
的服務器。 這是發送消息的服務器的地址(因為這看起來像客戶端代碼)? 如果我在本地運行虛假服務器:
$ nc -l 4000
...並將套接字地址更改為localhost:4000
,它將工作並嘗試從nc
創建的服務器讀取內容。
ServerSocket
並監聽它: ServerSocket serverSocket = new ServerSocket(4000);
Socket socket = serverSocket.accept();
第二行將阻塞,直到其他一些軟件在端口4000上連接到您的機器。然后您可以從返回的套接字讀取。 看看這個教程,這實際上是一個非常廣泛的主題(線程,協議...)
試試這段代碼,而不是ObjectInputStream
。
BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
while (true)
{
String cominginText = "";
try
{
cominginText = in.readLine ();
System.out.println (cominginText);
}
catch (IOException e)
{
//error ("System: " + "Connection to server lost!");
System.exit (1);
break;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.