2011-12-16 164 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)关闭套接字。