我通常是一个.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