2012-10-03 60 views
1

我有兩個Java應用程序,一個是web應用程序,另一個是簡單的java應用程序,所以我使用Socket編程進行通信。如何在Java Socket編程中在一臺服務器和多臺客戶機之間進行通信?

我做了一個SocketServer的是一個主題,我在其中創建ServerSocket serverSocket = new ServerSocket(6789) 而在我的web應用程序,我創建Socket client = new Socket("localhost", 6789); 我的服務器發送一些數據到客戶端和客戶端將啓動一些其他的工作,但如果我想運行其他客戶端即服務器將發送不同的參數,客戶端必須開始處理我應該怎麼做?

因爲服務器已經開始對「6789」端口和第一個客戶也使用相同的端口。我怎樣才能用另一個端口啓動客戶端?

每次服務器必須首先啓動,然後客戶端。

我認爲,直到兩者都具有相同的端口客戶端將無法找到服務器。

難道我必須創建具有不同端口的另一服務器實例,然後調用客戶端???但是,我的客戶如何知道哪個端口服務器已啓動?

例如:

想象我有UI類似:

開始MIlind

開始XYZ

開始ABC

,並點擊strart它會調用客戶端和啓動過程如果首先啓動Milind,那麼我將如何啓動xyz? 因爲'開始Milind'在端口6789啓動客戶端和服務器,其他啓動過程將如何工作?

回答

4

這似乎是一個很大的開銷來創建服務器/客戶端應用程序只是一個web應用程序與本地Java程序通信(更應如此重複這個過程中做一次超過一件事)。如果您正在Web應用程序的後臺尋找併發處理,那麼您總是可以創建一個線程(或多個線程)來完成這項工作。或者,有沒有原因,爲什麼簡單的Java應用程序不能嵌入到Web應用程序?

+0

是的...我的Java應用程序只做後臺進程,我不能將它改爲web應用程序,就像一個庫。 如果我做了不同的線程,那麼我的客戶怎麼會知道新的端口? –

+0

您不必將其更改爲Web應用程序,就可以像使用其他庫一樣在Web應用程序中使用它。但我不確定客戶是否知道新端口的含義。您是否計劃在處理完成後向客戶端發送更新? –

+0

請看我更新的問題..如果你不明白,請讓我知道。 –

2

你需要接受你的套接字連接服務器端時,分離出來的線程。這很容易用serversocket完成。一個非常基本的(未經測試!)實現:

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

class Server { 

    private ServerSocket socket; 

    public Server() { 
     try { 
      this.socket = new ServerSocket(6789); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void go() throws IOException { 
     while(true) { 
      Socket sock = socket.accept(); 
      new Thread(new ClientSession(sock)).start(); 
     } 
    } 

    public static void main(String[] args) { 
     Server server = new Server(); 
     try { 
      server.go(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    class ClientSession implements Runnable { 

     private final Socket clientsocket; 

     ClientSession(Socket sock) { 
      this.clientsocket = sock; 
     } 

     @Override 
     public void run() { 
      //do stuff, like read from socket. 
     } 

    } 

} 

請注意,您根本不需要更改端口。

+0

你能給我舉個例子嗎?我對Sockets沒有清楚的認識。:( –

相關問題