我正在使用Java套接字客户端。如果服务器仍连接到我的客户端,但是它不发送对我的消息的响应,则最终会出现读取超时异常。
在那种情况下,我想测试一下是否应该重新连接我的插座,或者只是保持插座可重复使用。
我使用这种情况:
if (!socket.isConnected() || socket.isClosed() || !socket.isBound()) {
try {
socket.close();
} catch (IOException e1) {
}
// Wait on a new connection
socket = connectSocket(.....);
}
但我似乎总是重新连接。当我记录布尔属性的值时,我看到以下内容:
已连接:true已关闭:true绑定:true
如何连接和关闭?
TIA
该主题对此主题进行了一些有用的讨论。事实证明,Socket.isConnected
如果(曾经)成功连接,则返回true。
从上面的线程:
使用
Socket()
似乎已被忽略的时,它会
Socket.isConnected()
告诉您是否Socket.connect()
已被调用。isClosed()
和和类似close()
。这些方法的混淆是由于将受应用程序控制的 套接字 状态与受协议控制的整个 连接 状态混淆 。
isConnected()
并isClosed()
告诉您您对套接字做了什么。除了读取和写入外,没有其他API可用于确定连接状态。
文档说:
如果套接字成功连接到服务器,则返回true
而不是像人们期望的那样“ 如果套接字连接到服务器,则返回true ”。
可以通过查看Socket的来源来确认该行为:
public boolean isConnected() {
// Before 1.3 Sockets were always connected during creation
return connected || oldImpl;
}
您还可以运行以下小测试代码段:
Socket s = new Socket();
System.out.println("isConnected: " + s.isConnected() +
" isBound: " + s.isBound() +
" isClosed: " + s.isClosed());
s.connect(new InetSocketAddress("google.com", 80));
System.out.println("isConnected: " + s.isConnected() +
" isBound: " + s.isBound() +
" isClosed: " + s.isClosed());
s.close();
System.out.println("isConnected: " + s.isConnected() +
" isBound: " + s.isBound() +
" isClosed: " + s.isClosed());
哪些打印:
isConnected: false isBound: false isClosed: false
isConnected: true isBound: true isClosed: false
isConnected: true isBound: true isClosed: true
我必须说,文档在这一点上还不清楚,并且方法名有点误导。
我目前正在编写一个简单的TCP聊天客户端服务器应用程序,它与套接字一起工作。客户端连接到服务器,一旦被接受,就会创建一个新的工作线程来侦听客户端输入。连接到服务器(端口8818处的localhost)工作正常,但只要工作线程在登录java.net之后开始监听更多客户端输入。SocketException:引发连接重置(请参阅下面的堆栈跟踪)。我知道,此异常的一个可能来源可能是服务器或客户端未正确或
问题内容: Java 类有两种方法,分别检查套接字是关闭还是连接。我想知道仅开放的TCP套接字与开放和连接的TCP套接字有什么区别,这与UDP有何不同。 问题答案: 为了把事情简单地说,这是 开放的 是要么等待连接或已与另一个成功连接的插座。当一个套接字被 关闭 ,这意味着这个套接字没有连接不再可用,而且它的资源已被释放。一个已连接的好,这意味着该套接字已连接到另一个。 这样可以 同时打开并连接。
背景我正试图为我的java服务器创建一个android客户端应用程序,并让它们使用TCP套接字进行通信。 当我在android设备模拟器上运行我的应用程序时,它的工作原理是什么 当我在手机上运行该应用程序时,我无法正常工作,我在创建套接字时遇到连接超时。 异常 java.net.Connect异常: 无法连接到 /10.0.2.2 (端口 9111): 连接失败: ETIMEDOUT (连接超时)
问题内容: 该程序连接到服务器,并且当服务器关闭连接时,如果我尝试重新连接,它会说: 如果我关闭客户端中的套接字,然后尝试重新连接,它会说:。 有没有办法在管道破裂后重新连接它而不创建新的套接字? 问题答案: 假设这是一个面向连接的套接字: 否。您必须关闭旧的插座并创建一个新的插座,
我在我的电脑上开发了一个带有python的HIDServer(蓝牙键盘)。有2个服务器套接字(psm 0x11和0x13)正在侦听连接。当我尝试将IPhone连接到计算机时,我收到了一个传入连接(如hcidump中所示),但不知何故,连接被远程主机终止。我的套接字永远无法接受客户端连接。你能帮帮我吗? hciDumps: 启动我的程序后: HCI事件:命令完成(0x0e)plen 4写入扩展查询响
我正在开发一个单例BluetoothHelper类。在connectToBTDevice()方法中,调用了一个新线程,在该线程中,蓝牙套接字试图连接到蓝牙设备。不幸的是,它开始时很好,但退出时有一个警告系统。错误如下: BluetoothHelper.java onnectToBTDevice(BluetoothDevice device)方法位于第234行。BluetoothSocket con