2013-01-31 36 views
1

我有我可以連接到(我的本地網絡上)第三方服務器做一些巧妙的事情,我需要一個項目我工作的事情。我使用第三方提供的Java庫來連接所有的連接,並且我可以使用它們的代碼成功地向服務器發送命令。他們的代碼還提供了一些事件監聽器接口,只要我的程序正在運行,我就可以實現這些接口以便從服務器獲取狀態更改。我希望做的是創造這將只是作爲運行(或喜歡)服務從服務器上的事件永遠聽,它們寫入數據庫的程序,但我也需要能夠偵聽來自我的本地機器連接所以我可以使用命令行程序來告訴我的服務發送消息到服務器(服務器一次只允許一個連接)。的Java:監聽指令從本地程序

我已經看過(簡述)在JMS和RMI,但他們都看起來他們可能比我所想的,我需要本地通信更加複雜和重量級。是否有用於發送簡單的信息(通過簡單的我的意思是分隔的字符串會做的伎倆單管)兩大運行的應用程序之間的同一臺機器上更簡單的方法?

回答

1

,如果你想要的東西比RMI和JMS簡單,您可以使用套接字進行進程間通信。

sockets Java教程可能是一個良好的開端。

所在服務器等待客戶端連接,然後從客戶端接收的消息可能看起來像一個簡單的一個消息客戶端 - 服務器:

public class SocketsServer { 

    public static void main(String[]rags) throws Exception 
    { 
     ServerSocket ss1 = new ServerSocket(); 
     ss1.bind(new InetSocketAddress("localhost",9992)); 
     //accept blocks until someone connects 
     Socket s1 = ss1.accept(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(s1.getInputStream())); 
     String line; 
     while((line = br.readLine()) != null) 
     { 
      System.out.println(line); 
     } 
     s1.close(); 
     ss1.close(); 
    } 
} 

而對於客戶端:

public class SocketsClient { 

    public static void main(String[]args) throws Exception 
    { 
     Socket ss = new Socket(); 
     ss.connect(new InetSocketAddress("localhost", 9992)); 
     PrintWriter pw = new PrintWriter(ss.getOutputStream(), true); 
     pw.println("hello socket"); 
     ss.close(); 
    } 
}