我有一个Socket
正在侦听某个x端口。
我可以将数据从客户端应用程序发送到套接字,但无法从服务器套接字获得任何响应。
BufferedReader bis = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
String inputLine;
while ((inputLine = bis.readLine()) != null)
{
instr.append(inputLine);
}
此代码部分从服务器读取数据。
但是我不能从服务器读取任何东西,除非服务器上的Socket
被关闭。服务器代码不在我的控制之下,不能编辑它。
我如何从客户端代码中克服这个问题。
谢谢
4条答案
按热度按时间ctrmrzij1#
看起来服务器可能没有发送换行符(这是
readLine()
正在寻找的)。尝试一些不依赖于此的方法。下面是一个使用缓冲区方法的示例:20jt8wwn2#
为了在客户端和服务器之间通信,需要很好地定义协议。
客户端代码阻塞,直到从服务器接收到一行代码,或者套接字关闭。您说过只有在套接字关闭时才能接收到一些内容。因此,这可能意味着服务器不会发送以EOL字符结尾的文本行。
readLine()
方法因此阻塞,直到在流中找到这样的字符。或者套接字被关闭。如果服务器不发送行,不要使用readLine()。使用适合于定义的协议(我们不知道)的方法。ep6jt1vc3#
对我来说,这个代码很奇怪:
我记得,这将尝试读入一个缓冲区,直到找到一个
'\n'
。但是如果从来没有发送过呢?我的丑陋版本打破了任何设计模式和其他建议,但总是工作:
您还应该添加错误和中断处理的验证。对于WebServices结果,这对我来说是有效的(2- 10 MB是最大结果,我已经发送了)
jk9hmnmh4#
下面是我的实现