2013-07-30 173 views
2

我們想捕捉它涉及到系統端口的數據說,7777的Java偵聽端口

public static void main(String[] args) { 
     try { 
      final ServerSocket serverSocket = new ServerSocket(7777); 
      new Thread("Device Listener") { 
       public void run() { 
        try { 
         System.out.println("Listener Running . . ."); 
         Socket socket = null; 
         while ((socket = serverSocket.accept()) != null) { 
          System.out.println("| Incoming : "+ socket.toString()); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       }; 
      }.start(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

我們必須將數據發送到端口7777,它配備了原生的Windows應用程序的設備。 Windows本機應用程序正在接收來自該設備的數據。我們必須通過我們的java項目在端口7777上接收這些數據。創建

在上面的代碼,

  1. Java服務器套接字,但沒有傳入連接從該設備接收。

  2. Java服務器套接字接收來自telnet命令的連接。

  3. 其中使用由所述設備和所述其他本機應用程序可以是不同的數據格式,但它ATLEAST必須被從Java服務器套接字連接。這是對的嗎?

  4. 如何接收被傳輸到端口的數據7777。

編輯:

OK時,數據被接收與UDP套接字。它的長度是68。設備文檔沒有指定捕獲這些數據的任何方法,因爲它可能被設計爲與指定的應用程序一起工作。我們也無法聯繫製造商。有什麼方法(如果可能)知道傳入字節的格式。我們嘗試過網絡嗅探器,但我們無法理解格式。

回答

5

如果你從telnet命令接收,那麼我懷疑你有一個特定的網絡問題。

  1. 你的設備是不是和你說話有路由或防火牆的問題相同的IP地址/主機名,你用
  2. 配置Telnet
  3. 是使用UDP,而不是TCP設備可能
+0

感謝它是UDP端口 – user2463026

+0

@ user2463026因此,如果它是一個UDP端口,你爲什麼要使用TCP'ServerSocket'? – EJP

+0

不,後來我用'DatagramSocket'套接字更改了我的代碼。 – user2463026

3

java服務器套接字已創建,但未收到來自設備的傳入連接。

所以無論是有防火牆的方式或設備沒有試圖連接到該端口。

Java服務器套接字接收來自telnet命令的連接。

所以Java應用程序正在偵聽端口。

設備和其他本地應用程序使用的數據格式可能不同,但至少必須從java服務器套接字連接。這是對的嗎?

是的。

如何接收被髮送到端口7777

首先,你必須接受連接的數據。關於這裏的證據,該設備根本不連接到端口7777。我建議一些網絡嗅探是爲了看看它真的在做什麼。