下午玩 TCP/IP 的 Socket 通信时,使用 BufferedReader 的 readLine() 遇到了一个坑,现在终于解决了,特此记录下来。
程序很简单,客户段从控制台读取用户输入,然后发送至服务器端,主要代码如下
客户端:
Socket s = new Socket("192.168.0.4", 20022);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//用户获取用户输入
OutputStream os = s.getOutputStream();//用于向服务器输出
System.out.println("请输入要发送的文字:");
String input;
while ((input= reader.readLine()) != null) {
os.write(input.getBytes("utf-8"));
}
服务器端:
BuffedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));
String content;
while((content = reader.readLine() )!=null){
System.out.println("客户端数据:"+content);
}
发现只有在客户端执行os.write()方法后,加上 os.close() 方法,服务器才能收到数据,但是这样会同时关闭客户端的 Socket ,所以只能传送一次,显然不是程序想要达到的目的。
在网上一番搜索,看到了这篇文