套接字说它已关闭但实际上没有
Socket says it is closed but it is not
我的套接字有点问题。
所以,代码如下:
private class SocketThread extends Thread {
String whatistodo;
public SocketThread(String whatistodo) {
this.whatistodo = whatistodo;
}
@Override
public void run() {
try {
Socket socket = new Socket(IP (is set), port (is set)); // Eröffne Socket
if(whatistodo.equals("read")) {
Boolean isDone = false;
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr); // In Buffer
String msg;
while (!isDone && ((br.readLine()) != null)) {
// stuff
System.out.println(msg);
}
}
if(whatistodo.equals("close")) {
socket.close();
if(socket.isClosed()) {
finish();
}
}
Log.d("Socket", String.valueOf(socket.isClosed()));
} catch (IOException e1) {
/* Log.e("IOException", String.valueOf(e1));
Looper.prepare();
new AlertDialog.Builder(Bedienung.this)
.setTitle("Socketfehler")
.setMessage("Verbindung mit TCP fehlgeschlagen / verloren.")
.setPositiveButton("Ok", null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
Looper.loop(); */
}
}
}
我用函数 connectToSocket();
调用 class SocketThread
有一个名为 "whatistodo" 的字符串参数。
参数可以是"read"或"close"
protected Boolean connectToSocket(String whatistodo) {
Thread obj = new SocketThread(whatistodo);
obj.start();
return false;
}
如果有互联网连接,将调用函数 connectToSocket("read")
。
函数 connectToSocket("close")
被 onBackPressed
调用。
但是关闭套接字后,我仍然收到消息。
如何解决?
你好,巴尔杜厄斯
每次创建 SocketThread 时,它都会创建一个新套接字。如果 "whatistodo" 设置为 "close",它将创建一个新套接字并立即关闭它。 "whatistodo" 等于 "read" 创建的线程有自己的套接字,因此它将继续 运行 并从中读取。
您需要确保所有线程共享同一个套接字实例。
我的套接字有点问题。 所以,代码如下:
private class SocketThread extends Thread {
String whatistodo;
public SocketThread(String whatistodo) {
this.whatistodo = whatistodo;
}
@Override
public void run() {
try {
Socket socket = new Socket(IP (is set), port (is set)); // Eröffne Socket
if(whatistodo.equals("read")) {
Boolean isDone = false;
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr); // In Buffer
String msg;
while (!isDone && ((br.readLine()) != null)) {
// stuff
System.out.println(msg);
}
}
if(whatistodo.equals("close")) {
socket.close();
if(socket.isClosed()) {
finish();
}
}
Log.d("Socket", String.valueOf(socket.isClosed()));
} catch (IOException e1) {
/* Log.e("IOException", String.valueOf(e1));
Looper.prepare();
new AlertDialog.Builder(Bedienung.this)
.setTitle("Socketfehler")
.setMessage("Verbindung mit TCP fehlgeschlagen / verloren.")
.setPositiveButton("Ok", null)
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
Looper.loop(); */
}
}
}
我用函数 connectToSocket();
调用 class SocketThread
有一个名为 "whatistodo" 的字符串参数。
参数可以是"read"或"close"
protected Boolean connectToSocket(String whatistodo) {
Thread obj = new SocketThread(whatistodo);
obj.start();
return false;
}
如果有互联网连接,将调用函数 connectToSocket("read")
。
函数 connectToSocket("close")
被 onBackPressed
调用。
但是关闭套接字后,我仍然收到消息。
如何解决?
你好,巴尔杜厄斯
每次创建 SocketThread 时,它都会创建一个新套接字。如果 "whatistodo" 设置为 "close",它将创建一个新套接字并立即关闭它。 "whatistodo" 等于 "read" 创建的线程有自己的套接字,因此它将继续 运行 并从中读取。
您需要确保所有线程共享同一个套接字实例。