小编Jon*_*uer的帖子

Java - readObject()和setSoTimeout()

所以,我在我的客户端写了一个线程,它试图readObject()从套接字流.

该线程在客户端连接时运行.

可以在客户端的GUI上关闭与服务器的连接.如果客户端通过单击"断开连接"菜单选项决定断开连接(这不会退出客户端程序),则将关闭套接字并将a isConnected设置为false.

由于客户端读取线程尝试readObject()从流,而连接可以通过GUI关闭,我将超时设置为250毫秒(setSoTimeout(250)).

@Override
public void run()
{
  this.connection = this.connectionHandler.getSocket();
  while(connectionHandler.isConnected())
  {
    this.readCircle();
  }
  this.connectionHandler.setReadTaskRunning(false);
}

private void readCircle()
{
  try
  {
    this.connection.setSoTimeout(250);
    this.connectionHandler.readData(); //this uses readObject().
  }
 catch(SocketTimeoutException timeout){}
 catch(...){}
Run Code Online (Sandbox Code Playgroud)

}

我知道readObject()会阻塞,并检查客户端是否仍然连接,我将其包装在一个中while,检查(每次超时)客户端套接字是否仍然连接.

我现在的问题是:

如果readObject()开始获取服务器传递的对象,尝试读取它,但在处理超时时,流上的数据会以某种方式被"损坏",因为它被取消了.或者我应该让readObject()块,并在GUI线程想要关闭套接字时捕获异常.

我对套接字不太熟悉,也许我的方法完全错了.

java sockets socket-timeout-exception

6
推荐指数
1
解决办法
1841
查看次数

WebSocket 关闭操作码

当我close()在客户端(FF)上建立 websocket 连接并调试服务器端以查看传入数据(将其转换为十六进制以读取数据)时,我收到类似“8880825d04de”(仍被屏蔽)的内容。每次接近尝试时,我都会收到类似的数据“8880XXXXXX”。

掩码应该是“825d04de”,因为它每次都会改变,并且 RFC 告诉我客户端的关闭消息被掩码了。8880 让我感到困惑,因为在 RFC 中,指示关闭消息的操作码是 0x8。

有人可以向我解释一下吗?

rfc websocket

5
推荐指数
1
解决办法
6910
查看次数

标签 统计

java ×1

rfc ×1

socket-timeout-exception ×1

sockets ×1

websocket ×1