2011-02-10 69 views
0

我需要從我的Java應用程序監視設備狀態(例如設備ip = 192.168.0.22和端口17000,監視器意味着我發送每1秒的請求並獲取響應等數據)。我需要與發送給該設備的另一條消息並接收答案(在相同的IP和相同的端口上)並行。我創建了socket = new Socket(ipAddress,port)。如何實現我沒有碰到的問題(我需要:我先發送,我從第一個得到響應,我發送第二個從第二個得到響應,我發送第三個得到第三個響應,等等)?Java socket並行發送

+0

它是UDP還是TCP? – Guillaume 2011-02-10 10:04:12

回答

1

除非我失去了一些東西,

  • 你可以做每一個單獨的線程,
  • 或者您也可以將請求發送到所有三個插座,等待所有三個答覆。
  • 或者你可以設計你的服務器一次有三個未決的請求。 (它可能已正確工作)發送三個請求到一個連接並等待三個回覆。

最後一個可能是最有效的解決方案。

1

如果您的工作是關心訂單,所以您必須逐一發送請求數據,我的理解是,您的意思是,當您將數據同時發送到設備時,回覆你? 不用擔心,因爲套接字必須緩衝,一個用於發送,另一個用於接收。

1

您可以定義一個請求類型標識符。然後在實現的SocketServer端,可以解析標識符並將請求傳遞給用於處理該類請求的新線程。因此,在你的情況下,你會定義3個不同的處理程序,並且每種類型都會得到一個請求,您可以選擇使用哪個處理程序來處理請求。每個請求將使用相同的Socket進行。

不過,從你的最後一句話:

我需要:我先發,我從第一次得到響應 ,我送第二我從第二 響應,我送第三個我 得到第三響應等等

這聽起來不像並行請求。相反,它聽起來像你想要一個接一個地運行它們,即第二個請求取決於第一個請求的響應?如果是這種情況,那麼你只需使用相同的套接字(不要爲每個請求創建一個新套接字)。然後請求代碼中的邏輯將僅僅是發送請求1,等待響應1,然後發送請求2等等。