java socket基础-长连接与短连接

探索Java Socket长连接:实现与优化 本文详细讲解了如何在Java中使用Socket实现长连接,包含了基本的客户端-服务器通信示例以及心跳包机制的实现。通过这些示例,开发者可以更好地理解长连接的实现原理,并在实际应用中进行优化和扩展。 阅读详情

1概念
Socket:socket实际上是对TCP/IP进行的封装,我们可以使用socket套接字通过socket来传输。首先我们需要明白的一个概念就是通道,简单地说通道就是两个对端可以随时传输数据的信道。我么常说的所谓建立socket连接,也就是建立了客户端与服务器端的通道。
长短连接:显而易见,长连接也就是这个socket连接一直保持连接,也就是通道一直保持通畅,两个对端可以随时发送和接收数据;短连接就是我们发送一次或有限的几次,socket通道就被关闭了。首先,我们必须明白的是socket连接后,如果没有任何一方关闭,这个通道是一直保持着的,换句话说,如果任何一方都不关闭连接,这个socket连接就是长连接,因此Java中的socket本身就是支持长连接的(如一个简单的实验:服务器端不关闭连接,服务器端每隔10秒发送一次数据,服务器端每次都能正确接受数据,这个实验就可以证明)。
那么既然socket本身是支持长连接的,那么为什么我们还要提短连接的概念呢?试想一个中国移动的短信网关(即通过发布socket通信接口)每时每分都有N多个连接发送短信请求,加入服务器不加任何限制地直接和客户端使用长连接那么可想而知服务器需要承受多么大的压力。所以一般的socket服务器端都是会设定超时时间的,也就是timeout,如果超过timeout服务器没有接收到任何数据,那么该服务器就会关闭该连接,从而使得服务器资源得到有效地使用。
2 如何实现长短连接
在1中我们已经介绍了长短连接的概念,服务器如果超过timeout时间接收不到客户端的通信就会断开连接,那么假如客户端在timeout时间前一秒(或者更短的时间)发送一条激活数据来使服务器端重新计时,如此重复就能保证服务器一直不能进入timeout时间,从而一直保持连接,这就是长连接的实现原理。下面我们通过一张图说明:

由上图可见,是否是长连接完全取决于客户端是否会在timeout时间发送心跳消息,因此长短连接是和客户端相关的,服务器端没有任何区别(只不过服务器端需要设定timeout而已)。

2021-06-11 Java Socket短连接入门 Socket通讯顺序时不能颠倒,每次看别人的案例都倒在顺序上了。 服务端必须先接收消息再回复消息。 客户端必须先发送消息再接收消息。 流的关闭似乎是用socket.shutdownInput()和socket.shutdownOutput()来控制的,不能自己手动关闭流。 socket.getInputStream()对应socket.shutdownInput() socket.getOutputStream()对应socket.shutdownOutput() 意义应该是告诉对方我已经结束输入流或输出流 阅读详情

相关推荐

c# tcp 基于完成端口开发 高性能 高并发 吞吐量大 包含服务端 客户端完整代码 支持最大连接数支持65535个长连接

c# tcp 基于完成端口开发 高性能 高并发 吞吐量大 包含服务端 客户端完整代码 支持最大连接数支持65535个长连接

java socket长连接实现

java socket长连接的实现代码客户端代码合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 网络编程都是最底层都是基于socket的,鉴于客户端需要一直发送消息,使用短连接就不适合了,因为建立socket连接后发送完数据又马上断开连接。

weixin_43686413的博客 7889

Java实现Socket长连接和短连接

Java实现Socket长连接和短连接,实现原理可参见个人博客

Java原生网络编程

Java原生网络编程实现

weixin_46678115的博客 1008

c#完全端口高性能网络TCP服务器和客户端源码

一、源码特点 1、采用完成端口(IOCP)编写的高性能TCP网络服务器,进行收发测试代码。 2、报文收发处理速度非常快 3、pu使用率低 4、测试环境:双核2G内存 5、自带客户端和服务器通讯代码 6、服务器能连接5000以上客户端连接,上限取决于服务器性能了 二、功能介绍 1、实现网络通讯类的封装,这些类可以在项目中直接使用; 2、实现高并发情况下,数据接收和发送性能测试。 三、注意事项 1、开发环境为Visual Studio 2010,使用.net 4.0开发; 2、默认监听端口9900 3、将IP地址更换成本机的,再进行调试 4、如果提示本机积极拒绝访问,就把防火墙关了试试

深入浅出:CosineLRScheduler 调度器的原理与实战应用

本文深入解析了CosineLRScheduler调度器的核心原理与实战应用,详细介绍了余弦退火算法及其在深度学习模型训练中的优势。通过参数配置建议、PyTorch实现示例和常见问题解决方案,帮助开发者高效应用该调度器提升模型性能,特别适用于计算机视觉和自然语言处理任务。

sss66的博客 859

Socket通信总结

转: 一、Socket是什么 二、一些基本概念 三、java socket建立连接的过程   四、Socket 通信示例 五、建立通信链路 六、服务端代码: 七、客户端代码 测试图例:        因为项目需要,服务端需要一个SOCKET来接收客户端的请求,好吧,没办法度娘哇,结果很多都是linux的例子,功夫不负有心人啊,终于找到个demo,并且客户端代码详尽,记录之,以便以...

fantasysolo的博客 663

Python RK3588 MPP 8路视频硬解码!全体目光向我看齐!

本文重写了官方demo、加入了Zlmediakit进行拉流并通过pybind11将代码封装成so库,现在,在python中直接通过import的方式,就能完成基础的拉流解码操作,目前支持8路拉流解码!!!

m0_46303486的博客 4878

Java 原生网络编程-BIO

目录常见术语 常见术语 Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口。在设计模式 中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面,对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议。 主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须需要底层 TCP/IP 协议来建立 TCP 连接。建立 TCP 连接需要底层 IP 协

Fisher3652的博客 331

实战指南:Qwen3-ASR-1.7B 语音识别

本文介绍了Qwen3-ASR语音识别模型的安装与使用。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1804

Python二级考试题目及答案解析(含刷题软件)

答案:A 解析:print()函数可以在屏幕上输出指定的字符串或变量,input()函数用于从键盘获取用户输入,int()函数可以将指定的字符串或浮点数转换为整数,float()函数可以将指定的字符串或整数转换为浮点数。答案:A 解析:int()函数可以将字符串转换为整数,float()函数可以将字符串转换为浮点数,str()函数可以将任意类型的变量转换为字符串,bool()函数可以将任意类型的变量转换为布尔值。

YOLO 1万+

Java网络编程

RPC(Remote Procedure Call ——远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。服务消费方(client)以本地调用方式调用客户端存根;什么叫客户端存根?就是远程方法在本地的模拟对象,一样的也有方法名,也有方法参数,client stub接收到调用后负责将方法名、方法的参数等包装,并将包装后的信息通过网络发送到服务端;服务端收到消息后,交给代理存根在服务器的部分后进行解码为实际的方法名和参数;

小兔子的博客 1195

一文快速教你如何下载国自然模版

5. 成功进入“相关文件查看”页面后,点击左侧的“项目申请文件“,如果你此次申请的是“面上项目”,选择对应的下拉框,找到对应的模版下载即可。6. 🫑们发现,在当前页面点击“青年科学基金项目”,左侧出现的是“原国家杰出青年科学基金项目”。7. 进入下一页后,点击“青年科学基金项目”,便可以在右侧找到🫑们要找的模版啦。2. 成功登陆后,点击1处的“首页”,在首页界面,再点击2处的“项目批准”。8. 点击上图3处的“文件详情”,就可以找到可以下载的模版啦(如下图)。3. 从“项目批准”进入后,点击“管理”。

薰珞婷紫小亭子的博客 2397

【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

socket介绍 Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做 套接字,是网络通信中的一种约定。 Socket编程用于解决我们 客户端与 服务端之间通信的问题。 java中的serversocket类:用于创建Socket套接字的服务端,而Socket类的作用是创建Socket的客户端。代码层面是用Socket类去连接ServerSocket类,即客户端主动连接服务端。例: java中使用socket public static void main(String[]args){

qq_41358574的博客 2503

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

LangChain面试内容整理-知识点27:LangChain性能调优

LLM应用可能面临响应慢、成本高等性能问题。LangChain提供了一些优化方法和经验来提升性能和效率。

不务正业的猿 327

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递。我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序。这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容。 一.Java so...

dengben1096的博客 219

机器人视觉仿真软件:PCL (Point Cloud Library)_(8).点云分割技术

点云分割技术在机器人视觉处理中起着至关重要的作用,通过不同的分割方法可以有效地将点云数据中的不同物体或区域分离出来。PCL提供了丰富的分割算法,包括基于平面的分割、基于聚类的分割、基于模型的分割和基于条件的分割等。每种方法都有其适用的场景和优缺点,选择合适的方法可以显著提高点云处理的效率和准确性。希望本节的内容能够帮助读者更好地理解和应用点云分割技术。

kkchenjj的博客 822

Java网络编程BIO/NIO

在开发过程中,如果类的名字有Server或者ServerSocket的,表示这个类是给服务端容纳网络服务用的,如果类的名字只有Socket的,那么表示这是负责具体的网络读写的。Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器(Selectors),然后使用一个单独的线程来操作这个选择器,进而“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。

weixin_43875870的博客 656

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Netty原理与源码分析(1)- Java网络编程

RPC(Remote Procedure Call ——远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。一次完整的RPC同步调用流程:1)服务消费方(client)以本地调用方式调用客户端存根;2)什么叫客户端存根?就是远程方法在本地的模拟对象,一样的也有方法名,也有方法参数,client stub接收到调用后负责将方法名、方法的参数等包装,并将包装后的信息通过网络发送到服务端;3)服务端收到消息后,交给代理存根在服务器的部分后进行解码为实际的方法名和参数。

How - Liked | Blog 793

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络技术相关

【Java TCP/IP Socket】Socket编程知识点总结  http://blog.youkuaiyun.com/ns_code/article/details/16118955

Habby的专栏 949

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java Socket基础

Java Socket基础 较基础的Java Socket通信样例! 一、长连接通信 客户端和服务端建立通道后,Socket一直开着。两端通过read()等待消息。 1)简易聊天 服务端可主动对各个客户端发送消息,而各客户端只能单独发送给服务端。当然,只要你愿意,在服务端改下,即可转发了。 附件解压工程ChatSocket,运行TestServer、TestClient...

轻轻草原 157

Java如何实现接口调用?下面将详细介绍

Java网络编程

励志成为一名优秀的全能型软件开发工程师。 2712

【Netty 从成神到升仙系列 番外篇一】Java网络编程的来龙去脉

RPC(Remote Procedure Call ——远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。一次完整的RPC同步调用流程:1)服务消费方(client)以本地调用方式调用客户端存根;2)什么叫客户端存根?就是远程方法在本地的模拟对象,一样的也有方法名,也有方法参数,client stub接收到调用后负责将方法名、方法的参数等包装,并将包装后的信息通过网络发送到服务端;3)服务端收到消息后,交给代理存根在服务器的部分后进行解码为实际的方法名和参数。

爱敲代码的小黄 939
上一篇: Spring-Beans模块源码分析
下一篇: Java测试框架Mockito源码分析
张焱飞
博客等级 码龄11年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值