2012-10-14 58 views
2

我正在使用DatagramSocket運行UDP Java實現,其中接收在一個線程上運行,並且發送操作在單獨的線程上運行。當我的程序啓動時,我需要打電話給服務器並接收信息。問題在於,由於線程的原因,即使我首先啓動接收線程,但有時發送將首先出現,並且服務器迴應時,套接字尚未在另一個線程中調用receive()。由於此線程阻塞了receive()行,因此我無法使用標誌來驗證receive()是否已被調用。有沒有什麼辦法可以檢查套接字當前是否在receive()上阻塞,這樣我就可以等待發送,直到我驗證該條件爲止?如何在DatagramSocket處於接收狀態時意識到

+0

呃,大腦正在註銷,但這會是一個'CountDownLatch'的情況嗎?隨意把它放在一個答案,睡覺。 –

+2

@owlstead:或許問題中的發送線程也應該爲'thread.sleep' :) – Patrick

+0

問題是因爲receive()阻塞並等待,所以我不能遞減倒計數鎖存器,因爲它不會經過那個點。 – user1712917

回答

1

在recvfrom()循環之前從rx線程啓動tx線程,並在tx線程的開始處放置一個睡眠(2000),然後它也開始圍繞它的輸入隊列或任何它通常會執行的操作東西發送。

0

你不需要兩個插座。

  1. 創建一個單一的DatagramSocket.立即處於「接收狀態」。

  2. 啓動該過DatagramSocket.

  3. 開始接收發送線程發送過來的DatagramSocket.

的順序的接收螺紋(2)和(3)並不真正的問題任何更多。

相關問題