gpt4 book ai didi

java - Android 中的 Socket.read() 关闭时不返回任何内容并且不会抛出异常

转载 作者:行者123 更新时间:2023-12-01 10:47:34 24 4
gpt4 key购买 nike

我有一个 Android 代码,可以从 TCP 套接字发送和接收数据。它工作正常,但是,当套接字突然关闭时(例如,与 Wi-Fi 断开连接),我不会收到任何错误,无论是读取还是写入。在某些设备中,读取线程会抛出异常,但在其他设备(注4)中不会抛出异常,并且应用程序无法检测套接字是否关闭。

编写代码如下

try {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(msg);
writer.flush();
}catch (IOException e){
e.printStackTrace();
}

已读主题:

try {

int bytesRead;
String print = new String();
print = "";
InputStream is = socket.getInputStream();

while (socket.isConnected()) {
bytesRead = is.read();
if (bytesRead != -1) {
print += (char) bytesRead;
if (bytesRead == ']') {
final String toprint = new String(print);
try{
((socketListener) Ui).onSocketListen(ip,toprint);
}catch(NullPointerException ex){

}
print = "";
}
} else {
socket.close();
socket = new Socket();
break;
}

}
} catch (IOException e) {
// TODO Auto-generated catch block
socket = new Socket();
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}

最佳答案

the app can't detect wheter the socket is closed or not

套接字关闭。连接暂时中断,但 TCP 的设计能够承受这种情况。除非您有待处理的发送,否则您不会检测到网络中断。

您可以使用Socket.setSoTimeout()设置读取超时,当您捕获生成的SocketTimeoutException时,以某种方式决定是否要重试或放弃。

关于java - Android 中的 Socket.read() 关闭时不返回任何内容并且不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34088229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com