是否可以同时从套接字读取和写入?我尝试了双向客户端服务器通信......但事情是我首先将文件(字节)从客户端发送到服务器成功接收。但是当我回复时服务器发生故障管道错误(发生套接字异常)的文件
答案 0 :(得分:1)
套接字是双向通道。这就是为什么每端都有输入和输出流的原因。
如果您遇到损坏的管道异常,则意味着双方中的一方(客户端或服务器)过早地关闭了流。所以这取决于谁在抱怨。如果它是服务器(听起来像你的问题),那么它意味着客户端编写了它的消息,然后关闭了它的一切。因此,当服务器尝试响应时,它不在那里。所以检查一下客户。
为了帮助您,这是一个非常基本的客户端/服务器实现示例:
注意客户端在准备离开function getHiddenRFIDValue(stringValue) {
document.getElementById('hiddenRFIDValue').innerHTML = stringValue;
}
循环并完全终止执行之前永远不会关闭任何内容。听起来这是你的问题。如果在此行while
之后添加了out.println("[" + screenName + "]: " + s);
,您可能会得到同样的异常。
答案 1 :(得分:0)
是否可以同时从套接字读取和写入?
不,它不可能同时做到"同时"使用相同的插座。要同时执行此操作,部件需要同时充当客户端和服务器,每个部件上都有一个侦听器套接字。
但是,在客户端发送请求并且服务器在同一个套接字中响应时,阅读您的问题可能需要一个公共客户端< - >服务器通信,这可以通过一个套接字实现。
更准确地说,响应需要更准确地解决问题。
正如您所说的那样,可能会产生不同的问题。一组涉及网络基础设施,其他涉及程序设计概念,另一组涉及内存大小调整
关于基础架构,请确保您的服务器能够正确查看您的客户端。如果你在本地网络可能没有问题,但如果服务器在另一个网络或互联网上,可能是网关,路由,防火墙等问题可能导致服务器无法找回客户端。
关于programatic,正如我之前所说的,你只使用一个java套接字。这无法同时执行"信息传递只有一个通道(但java的魔力使它看起来像一个真正的并行通信)。 Java将它封装在两个流中,并且#34; InputStream"和" OutputStream"这似乎是" parallel"但不是。有相同的I / O,你需要小心不要关闭到服务器的输出流。过程应该是:
发送流 - >等待respose - >接收流 - >关闭溪流
答案 2 :(得分:0)
既不关闭套接字也不关闭输出流。你在客户端做一个shutdownOutput()。使用outputstream.shutdownOutput();在客户端发送函数后对此行进行编码。参考This is half closed socket function for bidirectional communication