2011-12-16 166 views
4

我試過在Java中測試套接字連接,但失敗了。這裏是我的代碼(兩個簡單的應用程序,服務器和客戶端):Java套接字連接

public class TestServer { 

public static void main(String args[]) throws IOException { 
    ServerSocket serverSocket = new ServerSocket(1111); 
    System.out.println("Server socket created"); 
    Socket socket = serverSocket.accept(); 
    System.out.println("Socket accepted"); 
    PrintWriter output = new PrintWriter(socket.getOutputStream(), true); 
    System.out.println("Output created"); 
    output.write("Output string"); 
    socket.close(); 
    serverSocket.close();  
} 
} 

public class TestClient { 

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

    Socket socket = new Socket("127.0.0.1", 1111); 
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    System.out.println("Input: " + input.readLine()); 
    socket.close(); 

} 

} 

輸出是(運行服務器後,之後,客戶端):

Server socket created 
Socket accepted 
Output created 
Input: null 

我不知道有什麼問題以及爲什麼客戶端沒有收到發送給它的字符串。我會很感激任何幫助。

回答

6

通常當我使用類PrintWriter或OutputStream時,我需要刷新其內容以通過套接字發送數據或將其寫入文件。

2

input.readLine需要輸入字符串中的換行符。嘗試用output.println替換output.write

我現在只是測試它,它應該像這樣正確工作。

+1

你的意思是`println`? ;) – 2011-12-16 12:16:45

+0

@Peter Lawrey:是的,對不起,我很匆忙。現在應該工作。 – Tudor 2011-12-16 12:19:09

1
//Put the line 

output.flush(); 

//in the end of the TestServer.java 

//and in the TestClient.java I have used the code as given below 

Socket socket = new Socket("127.0.0.1", 1111); 
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    String str; 
    while((str=input.readLine())!=null){ 
     System.out.println("Input: " + str); 
    } 
    socket.close(); 

} 
2

除了所有的其他意見,你不應該關閉插座本身,你應該關閉你的套接字的輸出流周圍形成的最外面的輸出流。將:

(a)中刷新輸出流 (B)關閉它 (C)關閉輸入流,和 (d)關閉套接字。