Java客户端SSLSocket:如何判断远程端是否已关闭连接?
我陷入了一个难题 我的客户端SSLSocket连接到服务器(不是Java),并按预期成功地读取和写入二进制数据。然后,在某个时间点,服务器断开客户机的连接。但是,客户端仍然可以调用Java客户端SSLSocket:如何判断远程端是否已关闭连接?,java,sockets,ssl,disconnected-session,Java,Sockets,Ssl,Disconnected Session,我陷入了一个难题 我的客户端SSLSocket连接到服务器(不是Java),并按预期成功地读取和写入二进制数据。然后,在某个时间点,服务器断开客户机的连接。但是,客户端仍然可以调用startHandshake(),而不会引发异常,并且我看不到连接断开的迹象,除了getLocalSocketAddress()返回所有0的IP 下面是代码的样子: SSLSocket socket = (SSLSocket)socketFactory.createSocket(host, port); socket.
startHandshake()
,而不会引发异常,并且我看不到连接断开的迹象,除了getLocalSocketAddress()
返回所有0的IP
下面是代码的样子:
SSLSocket socket = (SSLSocket)socketFactory.createSocket(host, port);
socket.setTcpNoDelay(true);
socket.setKeepAlive(true);
/* Socket happily sends/receives data */
socket.getOutputStream().write(myData);
socket.getOutputStream().flush();
socket.getInputStream().read(myBuffer);
// do something with myBuffer
Thread.sleep(20 * 1000); // During this wait period, server disconnects the client
socket.getLocalSocketAddress(); // returns host:port as expected
socket.startHandshake(); // doing another read/write will also produce the same result
socket.getLocalSocketAddress(); // returns an IP of all zeroes: /0:0:0:0:0:0:1129:6a1f%0:51447
socket.isClosed(); // somehow, returns false!
socket.isConnected(); // somehow, returns true!
socket.getOutputStream.write(myOtherData); // throws a SocketException: Broken pipe.
基本上,我想我的问题是,除了检查getLocalSocketAddress()
是否具有所有0的IP之外,是否还有其他方法确定服务器是否断开了连接?
如果已关闭套接字,或从未绑定或连接过套接字,则返回全零Socket.getLocalAddress()
告诉您是否已关闭套接字Socket.isClosed()
告诉您是否连接过该套接字Socket.isConnected()
read()
返回-1readLine()
返回nullreadObject()、readInt()、readXXX()
对于任何其他XXX,抛出EOFEException。