我正在使用两个使用套接字进行通信的 java 进程。
从服务器端,我用它来发送信息:
public void send(Serializable order)
{
try
{
if (this.clientSocket != null && this.clientSocket.isBound() && this.clientSocket.isConnected())
{
String json = "";
json = mapper.writeValueAsString(order);
log.info("sending to client : " + order.getClass());
json = convertToUTF8(json);
this.output.write(json + "\n");
this.output.flush();
log.info("Message sent to client");
}
else
{
log.info("no client connected");
}
}
catch (Exception e)
{
log.fatal("Exception while trying to send message to client : " + e.getMessage(), e);
}
}
这里的输出是:
private BufferedWriter output;
在客户端,我尝试读取这样的数据:
while (this.running)
{
try
{
String msg = in.readLine();
log.debug("MSG VALUE IS : |"+msg+"|\n\n**********\n");
if ("".equalsIgnoreCase(msg) || msg == null)
{
break;
}
这是一个:
private BufferedReader in;
这里的问题是一段时间后,服务器进程被阻塞,如果我运行 netstat 命令,我可以看到 recv-Q 和 send-Q 的值不为 0。
但我无法重现这种情况,所以我想知道是什么导致了这种情况,有没有办法处理这种情况,还是我必须改变读取数据的方式?
提前致谢。