我有一個Java客戶端和服務器我試圖寫Junit測試。在我的測試中,我等待服務器和客戶端之間的連接,然後寫一條消息到服務器到客戶端來測試通信。我發現如果我立即執行寫操作,它沒有收到,並且客戶端在BufferedReader.readLine()方法中保持阻塞狀態。如果我在套接字連接和服務器寫入調用之間添加一個半秒的睡眠,那麼一切都可以正常工作。Java套接字讀取未收到連接建立後立即發送寫入
我想弄清楚爲什麼需要睡眠。我知道套接字已經生成,並且在我的waitForConnection()方法返回一個服務器和客戶端已連接的報告之前,在其輸入流周圍封裝了一個bufferedReader。我最好的猜測是,我需要確保在服務器調用write方法之前調用客戶端的readLine方法;但我認爲套接字會自動緩衝輸入並且不立即讀取?
任何人都可以確認(或反駁)我懷疑我必須保證客戶端在服務器調用寫入之前調用readline。如果這是必需的,任何人都可以建議一種方法,即服務器可以檢測客戶端是否準備好接收輸入,而不必實施除TCP握手之外的另一次握手?
編輯:我應該早點說這個,但是失敗的測試是測試一個能否在舊的失敗時重新建立連接。客戶端連接後,我的模擬服務器終止socket/serverSocket,幾秒鐘後重新打開一個新的serverSocket並接受來自客戶端的新連接。客戶端第二次建立連接後,寫入失敗。我以前的測試只是測試連接發生,客戶端收到寫入似乎工作。
感謝
謝謝你的意見,但我已經確保既沖洗和換行正在做。同花順的東西確實會導致我原來的測試失敗,但那個更容易理解。 – user623257 2011-03-16 15:20:27