java网络编程Socket output is already shutdown

在java的网络编程中使用TCP协议在Client端和Server端循环收发消息时,如果用的是BufferedReader和BufferedWriter,出现Client端只能发送一次消息,当发送第二次消息时,Server端已经关闭的情况,具体报错为:Socket output is already shutdown或者是由于以前的关闭调用,套接字在那个方向已经关闭,发送或接收数据的请求没有被接受
解决方案为Client端发送完消息后不要写 socket.shutdownOutput();,直接bw.write(line); bw.newLine(); bw.flush();就行,写正确的代码实例如下:


import java.io.*;
import java.net.Socket;
import java.util.Scanner;
//Client端
public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket("127.0.0.1",10086);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));Scanner sc = new Scanner(System.in);String line;while(true){System.out.println("请输入要发送的内容:");line = sc.nextLine();bw.write(line);bw.newLine();bw.flush();//后面不要加  socket.shutdownOutput();line = br.readLine();System.out.println(line);}}
}

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(10086);Socket socket = ss.accept();BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String line;while(true){line = br.readLine();System.out.println(line);//回写数据bw.write("数据收到了");bw.newLine();bw.flush();//这里也不用写}}
}

按照上面的形式写代码,就可以循环发送数据了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C 语言共用体(Union)

C 语言共用体(Union) 在本教程中,您将学习C语言编程中的共用体。更具体地说,如何创建共用体(联合体),访问其成员以及了解共用体与组织之间的差异。共用体又被称为联合体, 和结构体同属于C语言数据类型中的结构类型。 …

Mendix与Java组件的完美结合实践

前言 在技术驱动的今天,应用开发的速度和质量已经成为企业竞争力的决定性因素。Mendix,作为一款领先的低代码开发平台,已经为全球数千家企业提供了快速、高效的开发解决方案。但在某些情况下,企业的特定需求可能超出了Mendix的标…

sqli-labs(3)

11. 看到登录框直接or 11 在hackerabar中我们可以看到这里是post传递的数据,在get中用--来注释后面的内容 因为get中#是用来指导浏览器动作的,--代表注释是空格,所以这里用# 之后就和get的一样了 1 order by 2 # order by 3报错 联合注入 …

21款奔驰GLS450升级23P驾驶辅助 提升安全出行

辅助驾驶越来越多的被大家所青睐!为了提升驾驶安全性和舒适便捷性奔驰改装原厂半自动驾驶23P辅助系统 23P智能辅助驾驶系统还是很有必要的,因为在跑高速的时候可以使用23P智能驾驶的自动保持车速,保持车距,车道自动居中行驶以及自…

CRM商机管理软件:构建客户为中心的管理理念

企业为什么选择CRM商机管理软件?1.CRM软件能够帮助企业建立以客户为中心的管理理念;2.CRM商机管理软件全面直观的展示客户数据;3.市场人员可以制订个性化的营销策略;4.移动应用为外出的销售带来的便利。 1.构建客户为中心的管理理…

C++实现KNN和K-Means

学校机器学习课程的实验课要求实现KNN和K-Means: (平时没听课)临时去查了一下KNN和K-Means是啥,然后自己用C写了小例子,想着写都写了那就把代码贴出来吧。 顺便再聊聊自己对于这俩算法的理解。 下面是文心一言的回答…

十年诉讼,迈瑞真的赢了吗?

迁延十年,迈瑞与科曼的知识产权纠纷案究竟要如何解读? 发端于2013年,两家国内医疗器械行业知名公司间的专利互诉官司,成为全行业最具代表性的案例。但这一案例本质并不复杂:不过商业利益之争。 要在烈度不断抬升的市…

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程(记忆码:7664363734)

项目管理PMP6.0-五大过程组、十大知识领域、四十九个过程(记忆码:7664363734) 项目经理的影响力范围三者关系图(五大过程组、十大知识领域、四十九个过程)五大过程组十大知识领域十大知识领域之间联系 四十九个过程&am…

如何通过提升客户体验带来更大的增长、更好的客户留存率?

客户期望的转变 在一个日益数字化的世界里,有必要采取以客户为中心的思维方式。因为客户与企业互动的方式有很多是在数字空间发生的,客户的需求和模式已经转变。 这种情况已经酝酿了几年,但在2020年才打开闸门。随着疫情的爆发,企…

FTX的前世今生:崛起、辉煌与崩塌

FTX,一度被誉为加密货币领域的明星交易所,其快速的崛起和令人瞩目的崩塌吸引了全球的关注。让我们回顾一下FTX的前世今生,了解其短暂的辉煌和骤然的崩塌。 1. 崛起: FTX的创始人山姆班克曼-弗里德在加密货币领域具有深厚的背景和…

Linux主机间的相互免秘钥

主机间的相互免秘钥 1.生成密钥 ssh-keygen -t rsa -P -f ~/.ssh/id_rsa运行以上命令后会在 ~/.ssh/ 目录下生成一对密钥对。 2.拷贝公钥 把自己的公钥传递给对方主机即可,这个公钥文件必须放在对方主机的~/.ssh/authorized_keys 文件中。 ssh-copy-id -i ~/.s…

智能座舱架构与芯片 - (2) 架构篇

一、定义 1.1 智能座舱定义 按照百度百科的定义,智能座舱(intelligent cabin)旨在集成多种IT和人工智能技术,打造全新的车内一体化数字平台,为驾驶员提供智能体验,促进行车安全。目前国内外已经有很多研究…

Django ORM 执行复杂查询的技术与实践

概要 Django ORM(Object-Relational Mapping)是 Django 框架的核心组件之一,提供了一种高效、直观的方式来处理数据库操作。尽管简单查询在 Django ORM 中相对容易实现,但在面对复杂的数据请求时,需要更深入的了解和技…

SSM应用程序启动流程

在一个基于SSM(Spring Spring MVC MyBatis)框架的Web应用程序中,启动过程涉及到Spring的IOC容器和MVC容器的初始化。 IOC容器初始化: Spring的IOC容器主要负责管理和装配应用程序中的各个Bean。在SSM框架中,IOC容器的…

【文末送书】深入浅出嵌入式虚拟机原理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

「Verilog学习笔记」含有无关项的序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1ns module sequence_detect(input clk,input rst_n,input a,output reg match);reg [8:0] a_tem ; always (posedge clk or negedge rst_n) begin if (~rs…

多行溢出显示省略号css

css高级应用三种方法实现多行省略 - 掘金

巨量广告投放时间段和计划类型如何配合使用?

投放时间: 1: 从今天起长期投放 2: 设置开始和结束日期 投放时段 1:不限 2:指定时间段 99%计划会选择从今天起长期投放 计划开启后一般不会暂停,暂停相当于给计划判了无期徒刑,中断系统探索,本来生命周期有3天,暂…

maven打包项目,然后给其他项目引用

A项目(这个项目需要被打包,作为被引入的项目),不需要启动类,因为作为公共模块被B项目引入: package com.yunya.mvndependontest.rest;import org.springframework.web.bind.annotation.RequestMapping; im…

SpringDoc枚举字段处理与SpringBoot接收枚举参数处理

本期内容 添加SpringDoc配置展示枚举字段,在文档页面中显示枚举值和对应的描述添加SpringMVC配置使项目可以接收枚举值,根据枚举值找到对应的枚举 默认内容 先不做任何处理看一下直接使用枚举当做入参是什么效果。 定义一个枚举 package com.exampl…