使用readLine()方法遇到的坑

下午玩 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 ,所以只能传送一次,显然不是程序想要达到的目的。

在网上一番搜索,看到了这篇文

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值