我需要建立一個應用程序,它可以接收來自網絡的數據並使用這些數據做一些不相關的事情。Java中的套接字...?
下面是一段代碼,以表明我在做什麼。
在服務器端:
static Socket client = null;
static ServerSocket ss = null;
if (ss != null) {
ss.close();
}
ss = new ServerSocket(5513);
isrunning = true;
System.out.println("Waiting for client...");
client = ss.accept();
System.out.println("Client accepted.");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
和客戶端:
Socket client = null;
PrintWriter out = null;
try {
client = new Socket("hostname", 5513);
out = new PrintWriter(client.getOutputStream(), true);
}
請注意,這只是一塊代碼。代碼中沒有錯誤。
運行服務器端代碼後,它正確地等待客戶端連接。
現在問題來了。只要我嘗試從客戶端連接,我就會收到「連接被拒絕」 - 錯誤。
但是,我在互聯網上發現了一些東西,告訴我嘗試從客戶端進行遠程登錄。例如,讓服務器端IP爲192.168.1.1。所以,使用這個命令後:
telnet 192.168.1.1 5513
我實際上得到了一個與服務器的連接。該命令將啓動一個空白屏幕,並且在按下Enter鍵(通過調試進行檢查)後,手動鍵入命令行中的所有內容都將發送到服務器端。
所以,我可以手動連接到服務器端併發送一些數據,但我的代碼拒絕連接。
任何知道我在做什麼的人都是錯的?
我不確定你爲什麼失敗,但是我使用這兩個教程輕鬆運行套接字:http://android-er.blogspot.com/2011/01/implement-simple-socket-server-in。 html 和http://android-er.blogspot.com/2011/01/simple-communication-using.html – HannahMitt 2012-04-13 17:05:43
@HannahMitt,他忘了'while'循環。服務器甚至不會在超過一秒的時間內監聽連接。一旦服務器建立一個連接,它就完成了,不再聽了。 – 2012-04-13 17:35:20
正如我所說,這只是一段代碼。實際上,我正在使用while循環。此外,accept()方法將等待連接建立,所以我可以讓服務器等待幾個小時來建立第一個連接。之後,它將循環到另一個連接的開始。 – 2012-04-14 11:48:01