我对Socket有点问题。 所以,代码如下:
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();
调用类 SocketThread
有一个名为“whatistodo”的字符串参数。
参数可以是“读取”或“关闭”
protected Boolean connectToSocket(String whatistodo) {
Thread obj = new SocketThread(whatistodo);
obj.start();
return false;
}
如果有互联网连接,则会调用函数connectToSocket("read")
。
函数connectToSocket("close")
由onBackPressed
调用。
但在关闭套接字后,我仍然收到消息。
如何解决这个问题?
问候,Baldoius
答案 0 :(得分:1)
每次创建SocketThread时,它都会创建一个新套接字。如果" whatistodo"设置为"关闭",它将创建一个新套接字并立即关闭它。使用" whatistodo"创建的主题等于"读"有自己的套接字,所以它将继续运行并从中读取。
您需要确保所有线程共享同一个套接字实例。