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?
peut vous exécuter jstack sur le processus et post où il est accroché? –
Je ne suis pas familier avec jstack, comment pourrais-je l'exécuter sur le programme? – Skeith
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. –