java.net.SocketException: Socket is closed

C

Canaboca

Neues Mitglied
0
Hallo :))
Ich suche schon seit Stunden den Fehler, doch ich komme einfach nicht weiter :((
Wenn ich mein Wlan einschalte und dann von der Activity zurück möchte, bekomme ich andauern diese Exception:
java.net.SocketException: Socket is closed
at java.net.DatagramSocket.checkClosedAndBind(DatagramSocket.java:604)
at java.net.DatagramSocket.receive(DatagramSocket.java:158)
at Android.Steuerung.Heizung.run(Heizung.java:158)
at java.lang.Thread.run(Thread.java:1096)

Hier mein Code
HTML:
//wird in der onCreate methdode ausgeführt
 //wenn ich im WLAN netz drinnen bin, dann beginne ich Daten zu empfangen
  if(mobile.isConnected() == true) {
            //Log.d("network", "IST IM WLAN");
         sendData(REFRESH);
         startSniffing();
  }
 
//starten des Threads;
 private void startSniffing(){
  if(!tt.isAlive()){
   try {
    receiveSocket = new DatagramSocket(empf_port);
       tt.start();
   }
   catch (SocketException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  } 
 }
//stopen des Threads:
private void stopSniffing(){
  if(tt.isAlive()){
   tt.stop();
   receiveSocket.close();
  }
 }
//senden der Daten
[LEFT]public void sendData(String data){
try{
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress;


byte[] sendData = new byte[1024]; 
sendData=data.getBytes();
IPAddress = InetAddress.getByName("192.168.0.255");
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, server_port);
clientSocket.send(sendPacket);
Log.d("udp tutorial", "senden erfolgreich");

clientSocket.close();
}
catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}[/LEFT]
}
//Erhalten der Daten:
 public void run() {
  // TODO Auto-generated method stub
  while(true) {
   try {
    byte[] buffer = new byte[1024];
    DatagramPacket p = new DatagramPacket(buffer, buffer.length);
    receiveSocket.receive(p);
    byte[] packet = new byte[p.getLength()];
    System.arraycopy(p.getData(), 0, packet, 0, packet.length);
    text = new String(packet, "UTF8");
    Log.d("Udp tutorial","message:" + text);
    Log.d("RECEIVE", "ERFOLGREICH");   
    handler.sendEmptyMessage(0);
   } 
    catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 
//wenn ich zurück switche rufe ich einfach die stopSniffing und stoppe den Thread
public void onClick(View v) {[/LEFT]
if(v.equals(zuruck)){[/LEFT]
stopSniffing();[/LEFT]
Intent in = new Intent(Heizung.this,AndroidSteuerung.class);[/LEFT]
startActivity(in);[/LEFT]
}
 
Zuletzt bearbeitet:
Also bei dem Code habe ich nicht ganz durchgeblickt, liegt vielleicht auch an der Formatierung.

Meine Vermutung: du arbeitest mit einigen Threads und mehreren Sockets. Wenn du zurück willst, dann versucht ein Thread sicher noch Daten zu senden, obwohl das Socket schon geschlossen wurde. Überprüfe einfach mal, ob du wirklich alle Threads anhältst und die Sockets dann auch schließt. Wenn ich schon die eine Schleife sehe:

Code:
while(true){...}

Dann bin ich mir ziemlich sicher, dass das Problem in die Richtung geht.
 

Ähnliche Themen

M
Antworten
2
Aufrufe
894
maksimilian
M
M
Antworten
10
Aufrufe
823
maksimilian
M
Zurück
Oben Unten