JAVA 网络通信中 服务器与客户端新建IO流的顺序问题

java面试题 IO流 Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流,字符串流,对象流等等等。比如程序从服务器上下载图片,就是通过流的方式从网络上以流的方式到程序中,在到硬盘中BIO:同步并阻塞,服务器实现一个连接一个线程,即客户端有连接请求时服务器端就需要启动一。 阅读详情

今天写程序的时候遇到了一件非常奇怪的事,客户端跟服务器用SOCKET连接时,程序很奇怪的会卡死,而且不报错,DEBUG一天一直找不到错误,单步运行到 新建IO流的地方时,程序就不能继续往下走,而且不会报错,搞了一整天,不管是服务器端还是客户端都死在新建IO流的地方。。。

后来又百度了一下,改了客户端新建IO流的顺序,竟然就好了OTL……又欣喜有抓狂……

再后来,才搞清楚是自己太粗心忘了最重要的一点。。。 今天必须整理下,吃一堑长一智。。


如果服务器和客户端是通过IO流来通信的话,新建流的顺序必须是   相反的!

比如说 服务器端  建流的顺序是:

输出流ObjectOutputStream clientOutput = new ObjectOutputStream(socket.getOutputStream());
输入流ObjectInputStream    clientInput = new ObjectInputStream(socket.getInputStream());

那么客户端建立流的顺序必须是

 输入流 ObjectInputStream    clientInput = new ObjectInputStream(socket.getInputStream());

 输出流ObjectOutputStream clientOutput = new ObjectOutputStream(socket.getOutputStream());


如果顺序不相反的话,就会出现奇怪的卡死,并且不报错!!

其实这也很容易理解,因为服务端的输出流 连接 的是 客户端的输入流 客户端的输出流 连接的是服务端的输入流

所以要是建流的顺序一样的话,就不能连接到对方的流了!!


除了IO流的顺序要注意,还有几个顺序也是要相反的

比如关闭流的顺序  要从最底层的开始close, 再关闭封装它的高级流

关闭数据库的也是 要先关闭ResultSet 再关闭Statement 再关闭数据库连接Connection。

Java利用TCP协议实现客户端与服务器通信【附通信源码】 对于如何进行客户端和服务器端数据的通信,就要用到数据的输入流和输出流了,**服务器端的Socket对象使用getOutputStream()方法获取到的输出流,将指向客户端的Socket对象使用getInputStream()方法获取到的输入流。由此就实现在服务器向客户端发送数据的一个过程,**同样的道理,客户端端的Socket对象使用getOutputStream()方法获取到的输出流,将指向服务器端的Socket对象使用getInputStream()方法获取到的输入流。从而实现由客户端向服务器发送数据 阅读详情

相关推荐

Java网络编程:实现客户端与服务器端的通信与聊天功能

Java提供了两个主要的类,用于基于TCP的Socket通信:Socket类和类。Socket类用于在客户端创建一个连接到服务器的网络通信通道。类则用于服务器端,它可以监听来自客户端的连接请求,并接受它们来建立连接。一个典型的TCP服务器的生命周期包含以下步骤:1. 创建一个实例并绑定到一个端口。2. 调用的accept()方法来监听进入的连接请求。3. 对于每个接受的连接请求,创建一个新的Socket实例用于与客户端通信。4. 使用。

weixin_36289742的博客 312

客户端到服务器文件/数据流

试图找到一个关于如何将客户端文件流式上传到服务器的权威参考指南是一项艰巨的任务,因此这篇文章。

寒冰屋的专栏 670

Java网络通信系统完整毕业设计资料包

网络编程允许在不同计算机上的应用程序之间交换数据,是现代软件开发的核心部分。它依靠底层的传输层协议,例如TCP(传输控制协议)和UDP(用户数据报协议)来保证数据的可靠传输。设计模式,作为软件开发过程中一系列被广泛认可的解决方案,是软件工程中的经典内容。设计模式根据目的和范围的不同,被分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建,如单例模式、建造者模式、工厂方法模式等;结构型模式关注类和对象的组合,例如适配器模式、装饰器模式;

weixin_35815766的博客 856

Java异常处理+集合+IO流+多线程+网络编程

本课程是《Java初级至应用》系统课程的第三模块,全套课程精细讲解,课程超过其他机构30%的课程量,经过我们全套课程系统学习的同学,可轻松从事Java工程师或系统架构师岗位,课程提供全套代码笔记其它相关素材及答疑服务,可谓是低投资高回报!学习前或学习后有任何疑问请在课程中提问,老师看到会第一时间回复!

Java TCP通信实践:客户端与服务器端程序开发

Java的网络编程能力主要由java.net包提供,它包含用于创建网络应用程序的类和接口。其中,最核心的类包括Socket和,分别用于TCP客户端和服务器端的编程。Socket类提供了一种连接服务器端的方式,它允许进行数据的发送和接收。在Java中,Socket编程是通过和类来实现的。Socket类代表客户端,而类代表服务器端。这两个类提供了丰富的方法,以支持基于TCP和UDP协议的网络通信。try {// 创建Socket实例,连接到服务器。

weixin_36277197的博客 902

文献阅读:SAR像素偏移的性能改进An Improvement of the Performance of SAR Offset Tracking Approach

像素偏移追踪POT文献阅读

weixin_56301271的博客 342

java Socket编程 服务器和客户端执行的顺序问题

server和client是同时运行的, 遇到输出流就向socket中输出信息, 遇到输入流就准备读取socket中的信息。 但是如果在socket中没有可读信息,程序就会卡死了。 具体实验:1.让服务器和客户端使用true循环,一个先读入,再输出。一个先输出再读入。会从客户端先输出,然后服务器读入,继续下一步。      2.让服务器和客户端同时读入,程序卡在那里了。      3.

luoliuxin的博客 3198

一生一芯 预学习阶段 NEMU代码学习(2)

如果 nemu_state.state == NEMU_ABORT:说明程序处于 "中止" 状态,输出 "ABORT",并且使用 ANSI_FG_RED 红色格式化显示。如果 halt_ret == 0,表示程序正常终止(触发了 "GOOD TRAP"),输出 "HIT GOOD TRAP",并使用 ANSI_FG_GREEN 绿色显示。如果要执行的指令数量 n 小于预定义的常量 MAX_INST_TO_PRINT,则将 g_print_step 置为 true,表示会逐步打印指令执行的过程。

weixin_45041054的博客 826

java socket 以及 流 关闭的问题

首先我一下几个提出问题:稍后再做出解答。 问题一:A如果仅仅将输入流关闭(inA.close()),对A与B之间的连接是否有影响? A能否再次获得输入流(inA = socketA.getInputStream())? 是否A还可以发送数据...

dgit3228的博客 557

从工创赛实战到开源:一个高鲁棒性智能物流视觉系统的构建与优化

本文分享了从工创赛实战中构建高鲁棒性智能物流视觉系统的完整经验。针对赛场复杂光线环境,详细阐述了摄像头选型、基于CLAHE和形态学梯度的抗干扰色环识别算法、卡尔曼滤波状态估计以及多线程串口通讯与任务调度等核心优化策略,旨在打造一个稳定可靠的视觉系统,并已将相关代码开源。

weixin_29046035的博客 320

Claude Code插件安装与VSCode深度集成实战指南

Claude Code是一款专为IDE设计的AI编程助手插件,其核心价值在于将自然语言意图转化为可运行代码,从而优化开发者认知带宽分配。它依赖Node.js运行时、git版本上下文和VSCode编辑器API三者协同工作,技术原理涉及本地进程通信、权限策略绕过、上下文感知补全等关键机制。该工具显著提升工程效率,适用于CLI开发、EXIF元数据处理、异步逻辑生成等典型JavaScript/TypeScript应用场景。本文聚焦Claude Code插件在VSCode中的真实落地链路,覆盖Windows/macO

weixin_34006468的博客 474

【IO流系列】32.IO流

`IO(Input/Output)流`是计算机程序用于与外部设备进行数据交换的一种抽象概念。它是计算机输入输出操作的一种方式,常见于文件和网络通信等场景。IO流可以分为输入流和输出流两种类型。输入流用于从外部设备(如键盘、文件、网络等)读取数据到程序中,而输出流则用于将程序中的数据写入到外部设备中。

kuxiaoyang的博客 1115

手把手教你用Deep Single-Image Portrait Relighting实现人像光影重塑(附GitHub代码)

本文提供了一份详细的实战指南,手把手教你利用Deep Single-Image Portrait Relighting技术实现人像光影重塑。文章从环境搭建、核心原理拆解出发,逐步指导构建简易重光照流程,并探讨了使用预训练模型进行效果优化的进阶方法,最后附上避坑指南与常见问题排查,帮助开发者快速上手这一AI图像处理技术。

weixin_29065015的博客 316

深入理解IO流

IO流是计算机程序中不可或缺的一部分,它提供了灵活且高效的数据传输机制。理解并掌握不同类型的IO流及其应用场景,对于开发高效、可靠的软件至关重要。无论是处理文件、网络通信还是内存操作,IO流都是实现这些功能的基础。随着技术的不断发展,IO流的应用也将更加广泛和深入,为构建复杂系统提供坚实的基础。

2401_85327573的博客 880

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

亲爱的同学,毕设是不是让你既期待创新又担心技术门槛?如果你的毕设方向是计算机视觉、智能检测,那这个绝对能成为你的“毕设王牌”。从数据准备到界面开发,我会把整个项目拆成“傻瓜式”步骤,让你能一步步做出属于自己的毕设成果。

know_F0727的博客 104

流、Java IO流、OkHttp3

流 流的理解 流怎么处理大数据量? 流每次处理的数据量大小 Java IO流 Java IO流的分类 输入流与输出流 字节流和字符流 OkHttp3 使用OkHttp3发送GET请求 使用OkHttp3发送POST请求 使用OkHttp3需要注意的点

xingze的博客 265

【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(五)Adapter 微调

Adapter 微调(Adapter Fine-tuning)是一种高效的参数高效微调(PEFT)方法。相较于全参数微调(Full Fine-tuning),Adapter 在预训练模型的特定层插入轻量级的可训练模块,而冻结原始模型参数,从而减少计算和存储开销。是缩放因子,控制 Adapter 输出的影响程度。设 Transformer 层的隐藏状态为。为 Adapter 层的可训练参数,为非线性激活函数,如 ReLU。为冻结的预训练模型参数,

AI科研社 184

集合与io流

集合 Collection 集合是父接口 包含了List和Set两个子接口 Collection 接口存储一组不唯一,无序的对象 List 接口存储一组不唯一,有序(插入顺序)的对象 Set 接口存储一组唯一,无序的对象 Map接口存储一组键值对象,提供key到value的映射。Key无序,唯一。value不要求有序,允许重复。(如果只使用key存储,而不使用value,那就是Set)

zmx19910725的博客 1026

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java-64 深入浅出 分布式服务 网络通信 RPC 与 RMI 的 Java代码实现

服务端包括三个主要步骤:定义继承自 java.rmi.Remote 的远程接口、实现该接口并继承 UnicastRemoteObject、启动 RMI 注册中心并绑定服务对象。客户端则通过 Naming.lookup 获取远程服务的 Stub,并像调用本地方法一样调用远程方法。在实际实现中,定义了 WzkService 接口及其实现类 WzkServiceImpl,并通过 WzkUser 传递自定义对象参数。服务端通过注册并绑定接口,客户端构造对象后发起调用。

谢谢你的喜欢 我们一起无限进步 1077

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java TCP 通信:实现简单的 Echo 服务器与客户端

TCP 协议的特点:TCP 是一种面向连接的协议,保证了数据的顺序、可靠性和完整性,适用于需要可靠传输的应用场景。和 Socket:这两个类是 Java 中实现 TCP 通信的核心类。用于监听客户端连接,Socket用于表示客户端连接。多线程处理:为了支持多客户端并发连接,服务器使用线程池来处理每个客户端的请求。流操作和是 Java 中用于读写数据的核心类。通过Scanner和,可以方便地进行文本数据的读写。日志与调试:在实际开发中,打印日志是非常重要的,它可以帮助我们监控程序的运行状态,排查问题。

2301_79075954的博客 692

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java学习之——万字详解“IO流”中基本的字节流和字符流

Java IO流是处理输入输出的核心机制,分为字节流和字符流。字节流(InputStream/OutputStream)处理二进制数据,子类包括FileInputStream、BufferedInputStream等;字符流(Reader/Writer)处理文本数据,子类包括FileReader、BufferedReader等。缓冲流(BufferedXXX)通过内置缓冲区显著提升IO效率。输出流支持覆盖/追加模式,必须显式关闭以确保数据写入。字符流需注意编码问题,推荐使用UTF-8。典型应用包括文件读写、

freed_Day的博客 1462

Java IO与网络编程:Socket编程的深度实践

Socket编程是Java网络应用的基石。通过本指南,您已掌握从基础Echo服务器到多线程、NIO的深度实践。始终优先代码健壮性:添加异常处理、优化IO流,并测试真实网络环境。进一步学习可探索UDP协议或框架如Netty。

2501_93877867的博客 884

Java网络通信:UDP和TCP

【代码】Java网络通信:UDP和TCP。

weixin_63950083的博客 1372

Java Socket 编程:网络通信的基石

Socket(套接字)是网络编程中的一个抽象概念,它是对网络中不同主机上的应用程序之间进行双向通信的端点的抽象。简单来说,Socket 就像是两个应用程序之间的桥梁,通过这个桥梁,两个应用程序可以在网络上进行数据的传输和交换。Java Socket 编程是实现网络通信的重要手段,通过 TCP 和 UDP 协议可以满足不同场景下的网络通信需求。掌握 Java Socket 编程的基本原理和实现方法,对于开发网络应用程序具有重要的意义。

weixin_73344672的博客 720
上一篇: Android通过http协议POST传输方式
下一篇: try、catch、finally、return的执行顺序
caixiexin
博客等级 码龄17年 122粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值