У меня есть небольшая проблема с гнездом. Итак, код ниже: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(); */
}
}
}
Я называю класс SocketThread с функцией connectToSocket();
Там один строковый параметр называется «whatistodo». Параметр может быть «читать» или «закрыть»
protected Boolean connectToSocket(String whatistodo) {
Thread obj = new SocketThread(whatistodo);
obj.start();
return false;
}
Функция connectToSocket("read")
вызывается, если есть подключение к Интернету. Функция connectToSocket("close")
вызывается onBackPressed
.
Но после закрытия сокета я все еще получаю сообщения.
Как это решить?
Привет, Baldoius
Тестирование 'isClosed()' после того, как вы только что назвали 'close()' тщетным. Он всегда будет возвращать true. – EJP