2011-08-22 23 views
3

我想在這裏實現這個例子:Reading from and Writing to a Socket問題努力實現Java套接字例如

我複製並粘貼代碼到NetBeans。我改變了端口名稱「lucid中的」爲「localhost」,並試圖運行的例子,但我得到了錯誤:

run: Couldn't get I/O for the connection to: localhost. Java Result: 1 BUILD SUCCESSFUL (total time: 1 second)

我也試圖替代localhost作爲我的實際我的筆記本電腦的主機名,但它給人的類似的錯誤。你能幫助指出我做錯了什麼嗎?

編輯:關於馬克的建議,當我替補

System.err.println("Couldn't get I/O for " + "the connection to: localhost."); 

e.printStackTrace(); 

我得到:

run: 
java.net.ConnectException: Connection refused: connect 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
     at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
     at java.net.Socket.connect(Socket.java:529) 
     at java.net.Socket.connect(Socket.java:478) 
     at java.net.Socket.<init>(Socket.java:375) 
     at java.net.Socket.<init>(Socket.java:189) 
     at EchoClient.main(EchoClient.java:12) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 3 seconds) 
+0

有沒有被監聽的'本地主機連接的過程:7'? –

+0

你在使用什麼操作系統?如果是Linux/Unix,你需要使用sudo來運行它。或者將其綁定的端口更改爲大於1024. – arunkumar

+0

我正在使用Windows XP。我沒有任何其他進程在運行。我以爲端口7會自動回顯結果,因此在此示例中不需要套接字服務器。如果我不正確,請讓我知道。用'e.printStackTrace()';:謝謝〜 –

回答

3

回聲服務沒有收聽。爲什麼不寫自己的?運行下面的應用程序並更改您的客戶端以連接到相同的端口(8000)。

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class EchoServer { 

    private static final int PORT = 8000; 

    public static void main(String[] args) throws Exception { 

     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(PORT); 
     } 
     catch (IOException e) { 
      System.err.println("Could not listen on port: " + PORT); 
      System.exit(1); 
     } 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } 
     catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

     System.out.println("Echo server started"); 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) { 
      System.out.println("echoing: " + inputLine); 
      out.println(inputLine); 
     } 
     out.close(); 
     in.close(); 
     clientSocket.close(); 
     serverSocket.close(); 
    } 
} 

順便說一句,在下一個示例中(敲叩服務器)不工作,並給出一個使用「協議」類的一個很好的例子。

+0

非常感謝,得到了這個工作。現在來研究一下細節。 –

1

我不認爲回聲服務正在運行默認情況下,當我嘗試在我的Win XP客戶端上進行快速測試時,它不起作用:

H:\>telnet localhost 7 
Connecting To localhost...Could not open connection to the host, on port 7: 
Connect failed 

H:\> 

因此,要使您的代碼正常工作,您可以嘗試將其指向運行echo服務的服務器。