什么会导致Java TCP套接字关闭?
我试图在Android中使用MQTT客户机的一个实现,并试图跟踪哪里出现了错误 具体来说,这发生在.readByte()中的什么会导致Java TCP套接字关闭?,java,sockets,tcp,Java,Sockets,Tcp,我试图在Android中使用MQTT客户机的一个实现,并试图跟踪哪里出现了错误 具体来说,这发生在.readByte()中的in public final byte readByte()引发IOException{ int temp=in.read(); 如果(温度
in代码>
public final byte readByte()引发IOException{
int temp=in.read();
如果(温度<0){
抛出新的EOFEException();
}
返回(字节)温度;
}
看过这个异常后,当我试图从一个已关闭的套接字读取时,它似乎被触发。这似乎是一个网络错误,我找不到
我的问题是什么会导致插座关闭?我还没有排除它被程序关闭的可能性,但是在外部因素的情况下,TCP套接字关闭的通常原因是什么?可能还有其他与Android设备相关的具体原因吗?通常导致套接字关闭的原因有:
- 客户端关闭套接字
- 服务器关闭套接字,可能是由于超时
- 服务器在关闭之前或重新启动之后关闭并发出重置,从而关闭套接字
- 防火墙会超时连接,并通过随后的重置操作有效地关闭套接字
如果没有关于您的具体症状的更多详细信息,很难说哪种症状最有可能出现。可能有几个原因-您的代理实际上已关闭,您的网络已断开连接,您实际上关闭了流,您实际上获得了无效的EOF等等。在大多数情况下,这是一个编程关闭(意外)或网络端的一些错误。经纪人通常都很健壮。您能否检查您在
中的是否有效,并对代理发送的内容进行日志监控?
public final byte readByte() throws IOException {
int temp = in.read();
if (temp < 0) {
throw new EOFException();
}
return (byte) temp;
}