当前位置: 首页 > news >正文

当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息

public class SocketTCP04Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket =new ServerSocket(9999);System.out.println("Server:"+serverSocket.getClass());System.out.println("正在等待用户连接...");//当有用户连接时,会返回一个socket对象Socket socket = serverSocket.accept();System.out.println("Client:"+serverSocket.getClass());//查看连接到的用户//接受Client的输入信息String read =null;InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));while ((read= bufferedReader.readLine())!=null){System.out.println(read);}
//        String s = bufferedReader.readLine();
//        System.out.println(s);
//        socket.shutdownInput();//现在向Client发送数据OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("Hello, Client 字符流");bufferedWriter.newLine();//插入换行符,表示回复内容的结束bufferedWriter.flush();System.out.println("服务器已关闭~");bufferedWriter.close();bufferedReader.close();socket.close();serverSocket.close();}
}
public class SocketTCP04Client {public static void main(String[] args) throws IOException {Socket socket = new Socket(InetAddress.getLocalHost(), 9999);System.out.println("获取的Client的socket:" + socket.getClass());//现在向Server发送信息OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("Hello,server 字符流");bufferedWriter.newLine();/**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();此时对面一定要使用readLine()一次读一行代表读取结束*/bufferedWriter.flush();//现在接受Server的信息InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String read = null;while ((read = bufferedReader.readLine()) != null) {System.out.println(read);}
//        String s = bufferedReader.readLine();
//        System.out.println(s);socket.shutdownInput();bufferedReader.close();bufferedWriter.close();socket.close();}
}

 

 

此时的服务器还在等待输入,客户端也在等待服务器的应答,产生死锁,僵持不下。

经过一番尝试后发现,

当使用单行读取的时候,使用bufferedWriter.newLine();此时就不用关闭socket的输出流即socket.shutdownOutput();可以省略,当然写上去也没错。

当使用多行读取的时候,此时,必须使用关闭socket的输出流,即socket.shutdownOutput();不能省略!!!

单行接受代码如下: 

这是Client: 

 //现在向Server发送信息OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("Hello,server 字符流");bufferedWriter.newLine();/**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();此时对面一定要使用readLine()一次读一行代表读取结束*/bufferedWriter.flush();socket.shutdownOutput();//可以省略,加上不为错

这是Server端: 

//接受Client的输入信息String read =null;InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));String s = bufferedReader.readLine();System.out.println(s);socket.shutdownInput();

多行读取时:

这是Client端: 

 //现在向Server发送信息OutputStream outputStream = socket.getOutputStream();BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));bufferedWriter.write("Hello,server 字符流");bufferedWriter.newLine();/**插入换行符后,相当于写入结束,就不用socket.shutdownOutput();此时对面一定要使用readLine()一次读一行代表读取结束*/bufferedWriter.flush();socket.shutdownOutput();//一定不能省略

 这是Server端:

       //接受Client的输入信息String read =null;InputStream inputStream = socket.getInputStream();BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));while ((read= bufferedReader.readLine())!=null){System.out.println(read);}socket.shutdownInput();//不可省

http://www.lryc.cn/news/212488.html

相关文章:

  • 2310D,Dll,栈跟踪
  • JVS-BI数字大屏设计器:一站式解决方案
  • uniapp 中添加 vconsole
  • 目标检测 YOLOv5 预训练模型下载方法
  • 第16章_变量、流程控制与游标
  • 谁知道腾讯云轻量服务器“月流量”是什么意思?
  • 算法笔记【4】-冒泡排序法改进
  • cocos creator 资源管理
  • 好用的API调试工具推荐:Apipost
  • 贪心算法学习——最长单调递增子序列
  • 银行家算法(Python实现)
  • 安装终端 ·Terminator
  • 【Python文件操作的其他例子】
  • 使用Terraform管理已经存在的kubernates和默认的节点池
  • 在HTML当中引入Vue控件,以element-ui为例
  • UE5实现相机水平矫正
  • Word插入Latex语句并编译为数学公式
  • Google Play PolicyBytes 政策更新中文视频 | 2023 年 10 月
  • pytorch-fastrcnn识别王者荣耀敌方英雄血条
  • 阿里云推出通义千问App,提供全方位的协助
  • 深入解析 Spring Framework 中 @Autowired 注解的实现原理
  • 电脑数据文件恢复工具easyrecovery14中文版
  • Android NDK开发详解之Application.mk探秘
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • Golang Web3钱包开发指南
  • Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库
  • CentOS 安装 Hadoop Local (Standalone) Mode 单机模式
  • jenkins工具系列 —— 删除Jenkins JOB后清理workspace
  • 超越人眼,好用的OCR软件推荐
  • Go语言开发网站