2011-11-25 78 views
0

我創建了一個簡單的客戶端服務器套接字程序併發送字符串a | b | c | *,並且客戶端沒有收到它。客戶端在另一臺機器上。客戶端套接字未收到字符串

服務器代碼。

String format = "a|b|c|*"; 
ServerSocket ss = new ServerSocket(2222); 
System.out.println("Server Started."); 

while (true) {    
    Socket s = ss.accept(); 
    System.out.println("Connection accepted."); 
    InputStream is = s.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    PrintStream ps = new PrintStream(s.getOutputStream()); 
    ps.println(format);    
    ps.flush(); 
    System.out.println("Format sent."); 
}  

客戶端

try { 
    Socket s = new Socket("192.168.0.71", 2222); 
    // step 3: Get I/O streams 
    InputStream is = s.getInputStream(); 
    InputStreamReader isr= new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 

    String format = br.readLine(); 
    System.out.println(format); 
} catch(Exception ex){ 
    System.out.println(ex.getMessage()); 
} 

當我創建在同一臺機器上的客戶端則接收字符串,當我這個字符串傳遞到另一臺機器上的客戶端沒有收到它。

+1

會發生什麼?有沒有例外?它連接但沒有獲得任何數據? –

+0

@ Peter,是的,它確實連接,但沒有得到任何數據。 –

+0

當你使用telnet到主機和端口時,在同一個盒子和另一個盒子上,你會得到什麼? 'telnet 192.168.0.71 2222' –

回答

0

所以我試了你的代碼在我的兩個盒子和遠程連接工作正常。大量的不錯的評論,但我想我會寫出來的一些事情的答案,嘗試:

  1. 它已經暗示,你已經能夠在本地遠程連接到服務器,看看格式字符串。精細。你是否也能夠使用從遠程客戶端到服務器的telnet,並且也是請參閱格式字符串?

  2. 如果遠程telnet不起作用,那麼我會檢查是否有防火牆或其他路由問題。你能從客戶端ping服務器嗎?

  3. telnet可能無法正常工作的另一個原因是您的服務器可能綁定了錯誤的端口。默認是綁定到所有接口,但只是爲了確保,你應該檢查。如果您位於unix box或OSX上,則可以使用netstat命令查看要綁定的端口。以下輸出顯示服務器綁定到*,這意味着所有接口。

    $ netstat -an | grep 2222  
    tcp46  0  0 *.2222     *.*     LISTEN 
    
  4. 如果不出意外的幫助進而實現,如果你有一個telnet連接,它會阻止所有其他Telnet方式登錄和客戶端連接,因爲你不關閉服務器上的插座。

希望其中的一些幫助。

+0

現在它說無法連接到目標ipAddress:portNmumber –

+0

如果telnet說他們某種防火牆阻礙了你的服務器或你的服務器不工作。啓動你的服務器,在本地嘗試telnet,嘗試telnet off box但是在關閉的網絡上,遠程嘗試telnet。 – Gray

相關問題