Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets Groovy TCP客户端挂起_Sockets_Groovy_Tcp - Fatal编程技术网

Sockets Groovy TCP客户端挂起

Sockets Groovy TCP客户端挂起,sockets,groovy,tcp,Sockets,Groovy,Tcp,我通常是个.net开发者别伤害我!所以请原谅我在这里犯的任何愚蠢的错误: 我有一个用.net编写的TCP侦听器,它接收xml并返回响应。我正试图用groovy为它编写一个客户端,这样我就可以用loadUI加载测试。以下是我到目前为止的情况: def s = new Socket("10.208.24.59", 9061); s.withStreams { inStream, outStream -> def reader = inStream.newReader() def res

我通常是个.net开发者别伤害我!所以请原谅我在这里犯的任何愚蠢的错误:

我有一个用.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();
它现在挂在println r.readLine调用上

再次更新

事实证明,这是远程服务关闭的方式或更接近点的方式的问题,而不是关闭流。net和我们的大型机都正确地处理了它,但groovy脚本并不满意。我已经修复了服务,脚本现在运行得很愉快,值得其他遇到类似问题的人记住。

=Update====

嗨,克里斯

尝试将套接字写入放到streams处理器外部。您可以直接将输出指向套接字,因为Groovy将套接字类左移。另外,不直接相关,但有助于调试,设置套接字读取超时,这样线程就不会无休止地阻塞

def s = new Socket("10.208.24.59", 9061);
s.setSoTimeout(3000);
s << "Hello test server";
s.withStreams { inStream, outStream ->
  def reader = inStream.newReader()
  def responseText = reader.readLine()
  println "response = $responseText"
}
s.close()
====更新====

嗨,克里斯

尝试将套接字写入放到streams处理器外部。您可以直接将输出指向套接字,因为Groovy将套接字类左移。另外,不直接相关,但有助于调试,设置套接字读取超时,这样线程就不会无休止地阻塞

def s = new Socket("10.208.24.59", 9061);
s.setSoTimeout(3000);
s << "Hello test server";
s.withStreams { inStream, outStream ->
  def reader = inStream.newReader()
  def responseText = reader.readLine()
  println "response = $responseText"
}
s.close()

我的猜测是服务器正在保持连接打开,因此缓冲读取器不知道返回是否合适,并且正在阻塞等待更多数据。另外,Hello测试服务器不应该在获取responseText之前启动吗?好的,但是可能会有坏的服务或断开的连接。那么,在groovy中,如何为健壮的客户机实现超时读取呢?我猜是服务器保持连接打开,因此缓冲读取器不知道返回是好的,并且阻塞等待更多数据。另外,Hello测试服务器不应该在获取responseText之前启动吗?好的,但是可能会有坏的服务或断开的连接。那么,在groovy中,如何为一个健壮的客户端实现超时读取呢?这是有道理的,但仍然挂在同一点上——它似乎挂在withStreams行上,在它碰到闭包中的任何东西之前。顺便说一下,谢谢您的详细回复!仍然得到完全相同的结果-它挂起在withStreams行上,或者在包含timeout命令时超时。我可以在服务器日志中看到请求,请求文本不是XML格式,响应被发回。奇怪的是,我们很高兴地从各种各样的客户那里得到了这个。几乎准备放弃LoadUI作为测试工具。我还没有真正专注于XML和LoadUI。。。。。发送的有效负载是否应为XML格式,以便服务器能够接受它并做出相应的响应?XML是否应该采用特定的格式?我对LoadUI一无所知。现在下载它…应该是的,但是现在我很高兴服务器回复说输入格式不正确。理想情况下,所有这些都将是一个合适的Web服务,但我们的大型机将只通过一个直接的tcp管道进行通信。我尝试了另一种方法并编辑了这个问题,但我仍然挂起它…而且,目前我在eclipse中这样做,所以我可以使用debuggerMakes的感觉,但仍然挂起在同一点上-它似乎挂在withStreams行上,在它碰到闭包中的任何东西之前。顺便说一下,谢谢您的详细回复!仍然得到完全相同的结果-它挂起在withStreams行上,或者在包含timeout命令时超时。我可以在服务器日志中看到请求,请求文本不是XML格式,响应被发回。奇怪的是,我们很高兴地从各种各样的客户那里得到了这个。几乎准备放弃LoadUI作为测试工具。我还没有真正专注于XML和LoadUI。。。。。发送的有效负载是否应为XML格式,以便服务器能够接受它并做出相应的响应?XML是否应该采用特定的格式?我对LoadUI一无所知。现在下载它…应该是的,但是现在我很高兴服务器回复说输入格式不正确。理想情况下,所有这些都将是一个合适的Web服务,但我们的大型机将只通过一个直接的tcp管道进行通信。我尝试了另一种方法并编辑了这个问题,但我仍然挂起了它……而且,目前我正在eclipse中执行此操作,以便可以使用调试器
def s = new Socket("10.208.24.59", 9061);
s.withStreams { inStream, outStream ->
  outStream << "Hello test server"  // send request first
  def reader = inStream.newReader()
  def responseText = reader.readLine()      
  println "response = $responseText"
}
s.close();
Stack trace: 
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
   - locked java.io.InputStreamReader@2119899e
java.io.InputStreamReader.read(InputStreamReader.java:167)
java.io.BufferedReader.fill(BufferedReader.java:136)
java.io.BufferedReader.readLine(BufferedReader.java:299)
   - locked java.io.InputStreamReader@2119899e
java.io.BufferedReader.readLine(BufferedReader.java:362)
java_io_BufferedReader$readLine.call(Unknown Source)
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)