我正試圖編寫一個程序來偵聽正在運行的計算機上的端口4444,並記錄所有傳入數據。無法從端口讀取數據,InputStream掛起
這是我的代碼到目前爲止。
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;
}
}
當我運行它時,我得到這個作爲輸出。
D:\temp_104\foo>java -cp . foo
starting the constructor
url ready
connection ready
它每次嘗試創建輸入流時都會掛起。 我用超級終端測試了它,服務器正在輸出消息並可以連接到端口4444上。我運行java 1.5.0_15並且無法更新。
任何人都可以看到我做錯了什麼?
你可以在流程上運行jstack併發布它掛起的位置嗎? –
我對jstack不熟悉,如何在程序中運行它? – Skeith
它是jdk的一部分。 'jstack [PID]'將轉儲痕跡。或者如果你在調試器中運行它,你可以看看那裏的痕跡。或者你可以嘗試首先創建你的輸入流(connection.getInputStream()),看它是否掛在那裏。 –