Java套接字连接

4

我尝试在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

我不知道问题出在哪里,为什么客户端没有收到发送给它的字符串。感谢您的任何帮助。

4个回答

6
通常我使用像PrintWriter或OutputStream这样的类时,需要刷新其内容以通过套接字发送数据或将其写入文件。

这正是我的问题所在。谢谢。 - Yury Pogrebnyak

2

input.readLine 期望在输入字符串中有一个换行符。尝试用 output.println 替换 output.write

我刚刚测试了一下,这样应该可以正常工作。


@Peter Lawrey:是的,抱歉,我当时很匆忙。现在应该可以了。 - Tudor

2
除了其他评论之外,您不应关闭套接字本身,而应关闭您在套接字输出流周围创建的最外层输出流。这将会:
(a) 刷新输出流 (b) 关闭输出流 (c) 关闭输入流,以及 (d) 关闭套接字。

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();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接