2016-04-27 5 views
0

Ich versuche, einen TCP-Client in Android Java zu codieren. Die meisten funktionieren gut. Aber ich habe ein Problem. Wenn der Socket verbunden ist und der remoteote-Host herunterfährt oder das Netzwerk ausfällt oder etwas anderes, blockiert der socket.getinputstream weiter.Android, Java, Socket, bestimmen Remote-Host trennen

Ich weiß nicht, ob der Sockel noch angeschlossen ist. Ich code auch in objective-c und in objective-c bekomme ich ein Ereignis, dass der Socket zwangsweise heruntergefahren wird und ich versuche, die Verbindung wiederherzustellen. Also auf dem Objektiv c verfolgt der Sockel den Zustand.

In Java ist der Socket und der Eingangsstrom immer noch verbunden oder blockiert, auch der Socket ist ausgefallen. Wie kann ich überprüfen, ob der Socket noch angeschlossen ist?

 @Override 
     protected Void doInBackground(String... params) { 
     try { 
        String host = params[0]; 
        int port = Integer.parseInt(params[1]); 
        SocketAddress sockaddr = new InetSocketAddress(host, port); 
        Socket socket = new Socket(); 
        socket.connect(sockaddr,5000); 
        socket.setSoTimeout(7000); 

        out = new PrintWriter(socket.getOutputStream(), true); 
        mBufferIn = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        while (mRun) { 
         try { 
      ----->   mServerMessage = mBufferIn.readLine(); 
         }catch (Exception e){ 
          Log.d("my","hier3" + e.getMessage()); 
         } 
         if (mServerMessage.trim() != null) { 

           sender.messageReceived(s2); 

          }else{ 

          } 

         } 

        } 

       } catch (UnknownHostException e 

) { 

Antwort

0

Die Frage, wie man erkennen, wenn der Remote-Peer/Buchse die Verbindung hat answered here auch gewesen als here geschlossen hat. Grundsätzlich deuten die Antworten, die Sie aus der Fassung zu lesen versuchen, und dann beobachten, was passiert (read() kehrt -1 oder readLine() kehrt null oder Ihre Lesemethoden EOFException erhöhen.