2010-04-01 5 views
1

J'essaye de coder mon programme de sorte que le lecteur tamponné obtienne quelque chose dans readLine() de mon client tcp mais j'obtiens cette erreur dès que le programme exécuteBufferedReader.readLine() donne une erreur java.net.SocketException: la connexion causée par le logiciel a échoué: recv a échoué

Mar 31, 2010 11:03:36 PM deswash.DESWashView$5 run 
SEVERE: null 
java.net.SocketException: Software caused connection abort: recv failed 
     at java.net.SocketInputStream.socketRead0(Native Method) 
     at java.net.SocketInputStream.read(SocketInputStream.java:129) 
     at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) 
     at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) 
     at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) 
     at java.io.InputStreamReader.read(InputStreamReader.java:167) 
     at java.io.BufferedReader.fill(BufferedReader.java:136) 
     at java.io.BufferedReader.readLine(BufferedReader.java:299) 
     at java.io.BufferedReader.readLine(BufferedReader.java:362) 
     at deswash.DESWashView$5.run(DESWashView.java:448) 

la voiture = in.readLine() dans le code suivant jette l'erreur

public void getCar(){ 
     Thread gettingCars = new Thread(){ 
      @Override 
      public void run(){ 
       try { 
        car = in.readLine(); 
        if(!(car.equals(null))){ 
         StringTokenizer st = new StringTokenizer(car,";"); 
         int carTime = Integer.parseInt(st.nextToken()); 
         finTime.setText(""+((Integer.parseInt(currentTime.getText()))+washTime)); 
         currentTime.setText(""+carTime); 
         eventTextArea.append(""+car+"\n"); 
        } 
       } catch (IOException ex) { 
        Logger.getLogger(DESWashView.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }; 
     gettingCars.start(); 
     doOnce=false; 
    } 
+0

pouvez-vous s'il vous plaît poster une partie du code qui vous donner cette erreur? – Hector

+0

S'il vous plaît vérifier ce lien http://blogs.sun.com/oleksiys/entry/strange_software_caused_connection_abort Ici un scénario est mentionné comme la connexion est fermée après que certaines demande envoyer au serveur. à cause de cela quand vous essayez de recevoir les données que vous obtenez cette exception – sreejith

+0

@sreejith Le blog est erroné. Si l'homologue ferme la connexion, l'exception indiquera 'connection reset by peer'. Ceci est 'Abandon de la connexion causée par le logiciel'. Chose différente. – EJP

Répondre

0

de MSDN:

WSAECONNABORTED (10053) Abandon de la connexion provoquée par le logiciel

Une interruption de connexion a été provoquée à l'intérieur de votre machine hôte. Le logiciel a provoqué l'interruption de la connexion, car il n'y a pas d'espace dans la file d'attente du socket et le socket ne peut pas recevoir d'autres connexions.

Description de WinSock: L'erreur peut se produire lorsque le système de réseau local interrompt une connexion. Cela se produirait si WinSock interrompait une connexion établie après l'échec de la retransmission de données (le destinataire n'accuse jamais réception des données envoyées sur un socket de flux de données). Scénario TCP/IP: Une connexion expirera si le système local ne reçoit pas un accusé de réception (ACK) pour les données envoyées. Il serait également temporisé si un paquet TCP (FIN) ish n'est pas ACK'd (et même si le FIN est ACK'd, il finira par arriver à expiration si un FIN n'est pas retourné).

Il semble que cela se produise plus avec WindowsXP et il semble aussi être lié aux paramètres du pare-feu Windows. En tout cas, le point saillant est que l'abandon a pris naissance dans la machine locale.

C'est un message stupidement libellé.

Questions connexes