我通常是一個.net開發(不要傷害我!),所以請原諒我在這裏做:)Groovy的TCP客戶端掛
我有.NET編寫一個TCP監聽任何真正愚蠢的錯誤,這收到xml並返回響應。我正在嘗試在groovy中爲它編寫一個客戶端,這樣我就可以使用loadUI加載測試。這是我到目前爲止:
def s = new Socket("10.208.24.59", 9061);
s.withStreams { inStream, outStream ->
def reader = inStream.newReader()
def responseText = reader.readLine()
outStream << "Hello test server"
println "response = $responseText"
}
s.close();
我在eclipse中調試,它掛在withStreams行。我應該接受的是一個「消息不是XML」的消息,我可以通過telnet得到罰款。
任何想法我做錯了什麼?
更新 我只是嘗試這樣做,而不是withStreams關閉:
def r = new BufferedReader(new InputStreamReader(s.getInputStream()));
def w = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
w.write("Hello test server 2");
w.flush();
println r.readLine();
w.flush();
w.close();
它現在掛在的println r.readLine()調用
再次更新
事實證明,這是遠程服務關閉的問題(或者更重要的是 - 不是關閉)流。 .net和我們的大型機都正確地處理它,但groovy腳本並不快樂。我已經修復了這個服務,腳本現在運行得很開心,值得記住任何碰到類似問題的人。
我的猜測是服務器保持連接打開,所以緩衝讀者沒有按不知道返回是好事(並阻止等待更多數據)。另外,在獲取responseText之前不應該使用''Hello測試服務器'嗎? –
好的,但可能會有壞服務或連接斷開。所以,在常規,如何實現超時讀取健壯的客戶端? – Massimo