当前位置: 首页 > 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();//不可省

相关文章:

当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到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("正在等待用户连接.…...

2310D,Dll,栈跟踪

原文 帮助 有没有想过,如果运行时拥有调试器功能,会怎样? 对系统语言来说,常见问题是解引用空针.这几乎总是会导致崩溃,很难找到该问题,特别是你不是该项目的原始开发者时. 但是,不要害怕,在此我要讲如何在不需要实际附加调试器时获得有用的调试信息. 在Java中,已存在一个叫…...

JVS-BI数字大屏设计器:一站式解决方案

数字大屏介绍 数字大屏是当下数据展示、业务监控、指挥调度常见的业务表达形态,常有可视化的图表、效果装饰、事件操作等技术组成酷炫的效果展示。 配置入口 进入JVS-BI(bi.bctools.cn),进入大屏页面,如下图所示 ①…...

uniapp 中添加 vconsole

uniapp 中添加 vconsole 一、安装 vconsole npm i vconsole二、使用 vconsole 在项目的 main.js 文件中添加如下内容 // #ifdef H5 // 提交前需要注释 本地调试使用 import * as vconsole from "vconsole"; new vconsole() // 使用 vconsole // #endif三、成功...

目标检测 YOLOv5 预训练模型下载方法

目标检测 YOLOv5 预训练模型下载方法 flyfish https://github.com/ultralytics/yolov5 https://github.com/ultralytics/yolov5/releases 可以选择自己需要的版本和不同任务类型的模型 后缀名是pt...

第16章_变量、流程控制与游标

第16章_变量、流程控制与游标 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 变量 在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或…...

谁知道腾讯云轻量服务器“月流量”是什么意思?

腾讯云轻量服务器月流量什么意思?月流量是指轻量服务器限制每月流量的意思,不能肆无忌惮地使用公网,流量超额需要另外支付流量费,上海/广州/北京等地域的轻量服务器月流量不够用超额部分按照0.8元/GB的价格支付流量费。阿腾云aten…...

算法笔记【4】-冒泡排序法改进

一、冒泡排序缺点 冒泡排序是一种简单但效率较低的排序算法。冒泡排序通过比较相邻元素并交换位置来实现排序。具体而言,它从数组的第一个元素开始,依次比较相邻的两个元素,如果顺序错误则交换它们的位置,直到整个数组排好序为止…...

cocos creator 资源管理

cocos creator 在使用过程中,经常需要动态加载远端资源,比日说 用户头像,龙骨动画皮肤资源,这些资源不可能都做成 预制体交给 cocos creator 帮助我们管理; 这个时候就需要我们 动态加载远端资源(但是 动态…...

好用的API调试工具推荐:Apipost

随着数字化转型的加速,API(应用程序接口)已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中,API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台,旨在解决这些问题&#xf…...

贪心算法学习——最长单调递增子序列

目录 ​编辑 一,题目 二,题目接口 三,解题思路和代码 一,题目 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组…...

银行家算法(Python实现)

银行家算法,以及安全检测算法: import copy# 银行家算法(资源分配合法性) def BankersAlgorithm(Process_num, Resources_num, Request, Max, Available, Allocation, Need):PID Request[PID] # 获取发起请求的进程ID# Step1.如…...

安装终端 ·Terminator

安装终端 在 ROS 中,需要频繁的使用到终端,且可能需要同时开启多个窗口,推荐一款较为好用的终端:**Terminator。**效果如下: 1.安装 sudo apt install terminator2.添加到收藏夹 显示应用程序 —> 搜索 terminator —> 右击 选择 添…...

【Python文件操作的其他例子】

A.Python文件操作的其他例子 当然,以下是一些Python文件操作的其他例子: 1. 读取文件内容: with open(example.txt, r) as f:content f.read()print(content)这个例子会打开名为’example.txt’的文件,读取其内容,…...

使用Terraform管理已经存在的kubernates和默认的节点池

背景: 通过terraform resource "alicloud_cs_managed_kubernetes" "k8s" {...}创建集群时,会产生一个默认的节点池default-nodepool,但是如何去修改这个默认节点池的信息呢? 解决思路: 因为Ter…...

在HTML当中引入Vue控件,以element-ui为例

前情:需要实现一个同时满足按天、按周、按月选择的时间选择器,但是以HTML为基础写的都不太满足我的要求,要么只能按天选择,要么就是想选择久远的时间得点很久,除非自己写捷径,所以就看上了element-ui的这个…...

UE5实现相机水平矫正

UE5实现相机水平矫正 思路,用HIT获得基于相机视角的 离散采样点,然后根据距离相机距离进行权重分析。 距离越近,采样约中心,即越接近人眼注意点,最后算出加权平均高度,赋予给相机,相机将水平旋…...

Word插入Latex语句并编译为数学公式

WPS不可行,正版word可以(垃圾WPS) 选中Latex语句并按下Alt (此处以后补一张图) 该方法不需要额外安装什么插件哦!...

Google Play PolicyBytes 政策更新中文视频 | 2023 年 10 月

Google Play 持续帮助开发者开启成功出海之旅,为用户提供安全优质的应用。也感谢大家与我们携手合作,继续努力将 Google Play 打造为一个安全可信赖的平台。欢迎您观看 Google Play PolicyBytes 中文视频了解 2023 年 10 月政策更新内容,更及…...

pytorch-fastrcnn识别王者荣耀敌方英雄血条

文章目录 前言效果如下实现训练数据获得训练数据和测试数据yaml文件训练py画框文件的修改py测试py升级 前言 最近看王者荣耀视频看到了一个别人提供的一个百里自动设计解决方案,使用一个外设放在百里的二技能上,然后拖动外设在屏幕上滑动,当外设检测到有敌方英雄时外设自动松开…...

英雄联盟智能辅助套件:重新定义MOBA游戏体验的开源工具集

英雄联盟智能辅助套件:重新定义MOBA游戏体验的开源工具集 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Tool…...

UCF-SST-CitySim数据集:面向智能交通研究的高精度轨迹数据解决方案

UCF-SST-CitySim数据集:面向智能交通研究的高精度轨迹数据解决方案 【免费下载链接】UCF-SST-CitySim1-Dataset 项目地址: https://gitcode.com/gh_mirrors/ucf/UCF-SST-CitySim-Dataset 如何解决复杂道路场景的数据缺失问题?——CitySim的价值定…...

原子操作的实现原理

在并发编程、操作系统与计算机体系结构中,原子操作是保证数据安全、避免竞态条件的基石。它的核心特性是不可中断、不可分割,操作要么完整执行,要么完全不执行,绝不会出现中间状态。本文将从定义出发,逐层拆解原子操作…...

Next AI Draw.io:从自然语言到专业图表,AI如何重塑技术绘图工作流

1. 当技术绘图遇上AI:一场效率革命 上周三凌晨两点,我还在为一个客户紧急赶制系统架构图。传统绘图工具里反复拖拽调整的机械操作,让我的咖啡消耗量达到了平日的三倍。直到偶然发现Next AI Draw.io这个神器——用一句"生成包含负载均衡和…...

告别虚拟机!在Windows本地用Docker Compose一键部署MeterSphere测试平台

告别虚拟机!在Windows本地用Docker Compose一键部署MeterSphere测试平台 如果你是一名测试工程师或开发者,一定对MeterSphere这个开源持续测试平台不陌生。它集成了测试跟踪、接口测试、UI测试和性能测试等功能,兼容JMeter、Selenium等主流工…...

Element React:构建企业级UI的React组件解决方案

Element React:构建企业级UI的React组件解决方案 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react 作为React开发者,你是否曾为UI组件的一致性和开发效率而困扰?Element React作…...

B2B品牌战略方法拆解:客户层、业务层、价值层、证据层怎么串起来

一个有点反常识的判断是:真正拉开差距的,常常不是你有多少材料、多少动作、多少名字,而是你能不能先把最关键的判断结构做出来。B2B品牌战略一旦结构对了,后面的内容、渠道和场景才会越做越顺。B2B品牌战略是什么:围绕…...

nli-distilroberta-base前端集成案例:Vue.js构建智能文本分析界面

nli-distilroberta-base前端集成案例:Vue.js构建智能文本分析界面 1. 场景价值与方案概述 电商平台的客服系统每天需要处理大量用户咨询,其中很多问题都涉及产品参数的对比(如"这款手机电池容量比A型号大吗?"&#xf…...

基于YOLOv11深度学习的管道泄露识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 随着工业管道的广泛应用,泄漏事故不仅会造成资源浪费,还可能引发严重的安全事故和环境污染。传统的管道泄漏检测方法主要依靠人工巡检或传感器监测,存在效率低、响应慢、成本高等问题。为解决这一难题,本项目基于YOL…...

3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化

3个高效学习技巧:如何用JiYuTrainer实现课堂学习体验优化 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 问题场景:当数字化教学遇上学习需求冲突 "…...