2012-10-25 4 views
3

Je suis en train d'écrire un programme qui écoute sur le port 4444 sur la machine, il fonctionne et enregistre toutes les données entrantes.lecture du port Problème, InputStream se bloque

Ceci est mon code jusqu'à présent.

import java.io.*; 
import java.net.*; 

public class Foo { 
URL url; 
URLConnection connection; 
InputStreamReader stream; 
BufferedReader in; 
String inputLine; 
int test = 0; 

public Foo() 
{ 
    Connect(); 
} 

public static void main(String[] args) 
{ 
    Foo bridge = new Foo(); 
    System.out.println("made the class"); 
    for(;;) 
    { 
     System.out.println("in the loop"); 
     try 
     { 
      System.out.println("making the try"); 
      if((bridge.inputLine = bridge.in.readLine()) != null) 
      { 
       System.out.println("reading the line"); 
       System.out.println(bridge.inputLine); 
      } 
     } 
     /*catch(NullPointerException n) 
     { 
      System.out.println(bridge.test); 
      bridge.test++; 
     }*/ 
     catch(Exception e) 
     { 
      System.out.println("MAIN" + e); 
     } 
    } 
} 

public int Connect() 
{  
    try 
    { 
     System.out.println("starting the constructor"); 
     URL url = new URL("http", "192.168.0.104", 4444, ""); 
     System.out.println("url ready"); 
     URLConnection connection = url.openConnection(); 
     System.out.println("connection ready"); 
     //connection.setReadTimeout(5000); 
     connection.setDoInput(true); 
     InputStreamReader stream = new InputStreamReader(connection.getInputStream()); 
     System.out.println("stream ready"); 
     BufferedReader in = new BufferedReader(stream); 
     //BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
     System.out.println("bufferReader ready"); 

     return 0; 
    } 
    catch(Exception e) 
    { 
     System.out.println("CON" + e); 
    } 
    return 1; 
} 
} 

Lorsque je l'exécute, j'obtiens ceci comme sortie.

D:\temp_104\foo>java -cp . foo 
starting the constructor 
url ready 
connection ready 

Chaque fois qu'il se bloque lorsqu'il essaie de créer un flux d'entrée. Je l'ai testé avec hyperterminal et le serveur sort des messages et peut être connecté sur le port 4444. Je cours java 1.5.0_15 et ne peut pas mettre à jour.

Quelqu'un peut-il voir ce que je fais mal?

+0

peut vous exécuter jstack sur le processus et post où il est accroché? –

+0

Je ne suis pas familier avec jstack, comment pourrais-je l'exécuter sur le programme? – Skeith

+0

cela fait partie du jdk. 'jstack [PID]' va vider les traces. ou si vous exécutez ceci dans le débogueur vous pouvez regarder les traces là. ou vous pouvez essayer de créer votre flux d'entrée (connection.getInputStream()) d'abord pour voir s'il y est suspendu. –

Répondre

0

Je trouve que le problème était portée. Le lecteur tamponné était en cours d'initialisation dans la fonction, mais une fois de retour dans le principal, il était nul.

2

Vous lisez les lignes avec un BufferedReader. Le serveur écrit-il des retours à la ligne à la fin de chaque message?

+0

vous vouliez dire BufferedReader? :) – linski

+0

Je ne vois pas en quoi le programme se bloque dans le constructeur des entréestreams il ne lit jamais rien. – Skeith

+0

@Skeith, si le programme tombe en panne, alors s'il vous plaît poster la trace de la pile –