簡體   English   中英

通過Java套接字偵聽端口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM