2012-05-27 67 views
3

我有兩個連接到我的接入點的WiFi模塊M1和M2。我有一個連接到同一接入點的Android手機。我的android手機上有一個套接字服務器,這兩個模塊作爲客戶端連接到服務器。現在我的問題是,是否可以從我的手機發送字符串消息到模塊M1,而無需發送任何東西到M2。我想在客戶端之間選擇發送消息。 Java甚至有可能嗎?將消息從基本服務器發送到特定客戶端

好的,在這裏。

//setting up server 
ServerSocket serverSocket = new ServerSocket(8000, 0, IPaddress); 

//creating a client socket to accept it 
Socket clientSocket = serverSocket.accept(); 

現在,我接受一個單獨的線程中的客戶端,以便在主線程不會凍結becauz accept()功能阻止。

我不知道如何在每次新客戶端連接時創建新線程。另外我不知道如何限制可連接的客戶端數量。我最多需要5個客戶,不再需要。

回答

2

是的,這是可能的。您需要爲每個客戶端維護一個單獨的連接。 ServerSocket類具有返回Socket對象的accept()函數。該對象表示兩點之間的連接,即服務器和一個客戶端。您可以在循環中多次呼叫ServerSocket.accept()以接受所有傳入連接。每個Socket對象將返回給不同的客戶端。

爲了讓服務器向特定客戶端發送消息,它需要知道哪個套接字屬於哪個客戶端,因此客戶端必須向服務器發送一些標識自己的消息,並且服務器需要閱讀並解釋該消息。然後它可以針對該特定客戶端的適當響應進行響應。

如果您仍然遇到問題,請發佈您的代碼。

UPDATE因爲您在問題中添加了代碼:請參閱Android Documentation關於創建線程。這將是很多閱讀超過這個帖子在stackoverflow。

至於接受連接和啓動線程,只是做在一個循環:

for(int i = 0; i<5; i++){ 
    clientSocket = serverSocket.accept(); 
    // start a new thread, passing it the clientSocket as an argument 
} 

其他可能有用的鏈接: https://developer.android.com/resources/articles/painless-threading.html https://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

+0

噢老兄,你簡直就是一個天才。我無法用自己的話說得更好。我知道有可能只是不知道如何實現它。我有我的代碼,但我不知道如何把它放在這裏。當我複製並粘貼它顯示爲垃圾。我如何發佈代碼像其他人一樣堆棧溢出? –

+0

在代碼的每行之前放4個空格。當您編輯文章時,您帖子上方的「{}」按鈕會嘗試自動執行此操作,但它並不總是奏效。在你的文章的編輯框下面是預覽。另外,如果我的答案解決了您的問題,請隨時點擊旁邊的複選標記以表明問題已解決,併爲我提供正確答案獎勵。 – kaz

+0

甜美。你是男人。生病給了一槍。在15分鐘後返回一些代碼 –

相關問題