(二)关于套接字的断开操作--半关闭

【从零开始入门unity游戏开发之——C#篇01】理论开篇,理解什么是编程 理论开篇,理解什么是编程 阅读详情

在我们断开套接字的时候,应该尽量保证一个通信流程的完整,例如服务器或者客户端要关闭套接字,应该跟对方说:我要断开了,对方收到断开请求,有的时候要做响应的处理,比如保存当前状态,或者发送最后一帧数据报告断开前的状态,直接调用close()不是不是最好的方法

半关闭

服务器端,一般服务器主动断开连接的时候,才会用到半关闭,
半关闭的意思是,服务器关闭写通道,此时会给客户端发送一个EOF信息,客户端收到之后,知道服务器要关闭连接,此时客户端还可以向服务器发送最后一次信息,做最后的数据处理,服务器收到之后会完全关闭套接字

//int shutdown(int sock,int howto)
//sock 套接字
//howto 断开方式  SHUT_RX 断开输入流   SHUT_WR  断开输出流    SHUT_RDWR  同时断开

int main(int argc, char const *argv[])
{
    int serv_sock,clnt_sock;
    int clnt_addr_size;
    char readbuf[READ_SIZE]={0};


    struct sockaddr_in serv_addr,clnt_addr;


    serv_sock=socket(PF_INET,SOCK_STREAM,0);
    if(serv_sock==-1)
        error_handling("creat socket error!");

    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr=htonl(INADDR_ANY);
    serv_addr.sin_port=htons(SERV_PORT);

    if(bind(serv_sock,(struct socaddr *)&serv_addr,sizeof(serv_addr))==-1)
    {
        error_handling("bind error");
    }
    if(listen(serv_sock,5)==-1)
    {
        error_handling("listen error");
    }
    clnt_addr_size=sizeof(clnt_addr);
    while(1){
        clnt_sock=accept(serv_sock,(struct socaddr *)&clnt_addr,clnt_addr_size);//这里会阻塞,等待客户端连接
        read(clnt_sock,readbuf,READ_SIZE-1);//读取客户端发送来的数据
        write(clnt_sock,readbuf,sizeof(readbuf));
    }
    shutdown(serv_sock,SHUT_WR);//关闭输输出通道,客户端会收到EOF,就知道服务端要关闭了,向服务端发送最后一帧数据
    read(clnt_sock,readbuf,READ_SIZE);//此时输入通道还未关闭,所以能读取客户端的数据
    close(clnt_sock);//完全关闭
    close(serv_sock);//完全关闭
    return 0;
}
void error_handling(char * message)
{
    printf("%s\n",message);
}
大数据数据埋点技术面试题及参考答案(持续更新) 事件:指的是用户执行的具体动作,如页面浏览、按钮点击、商品购买等。事件是触发数据记录的直接原因,是分析用户行为的关键点。属性:是与事件相关的额外信息,可以提供关于事件的更多上下文。例如,用户点击的按钮颜色、大小、页面位置等。属性有助于更细致地分析用户行为,理解事件发生的具体情境。事件和属性共同构成了数据埋点的数据模型,它们使得收集的数据具有可分析性,从而可以用于深入理解用户行为和优化产品。 阅读详情

相关推荐

深入解析V4L2框架与高通KMD在Camera驱动中的协同设计

本文深入解析了V4L2框架与高通KMD在Camera驱动中的协同设计。V4L2作为Linux内核标准视频驱动框架,提供了统一的设备抽象与数据流管理;而高通KMD则在其基础上,通过引入CRM等核心模块,构建了一套针对移动平台复杂相机系统的高效内核态驱动架构,实现了硬件配置与执行的解耦与智能调度。

qq_27496129的博客 1145

close(关闭套接字)

1、使用close函数即可关闭套接字 关闭一个代表已连接套接字将导致另一端接收到一个0长度的数据包 2、做服务器时 1>关闭监听套接字将导致服务器无法接收新的连接,但不会影响已经建立的连接 2>关闭accept返回的已连接套接字将导致它所代表的连接被关闭,但不会影响服务器 的监听 3、做客户端时 关闭连接就是关闭连接,不意味着其他 ...

qq_53614206的博客 2639

人工蜂群优化算法(ABC)详解:原理、实现与应用

人工蜂群算法(Artificial Bee Colony, ABC)是Karaboga于2005年提出的一种群体智能优化算法,其灵感来源于蜜蜂群体在自然界中高效的采蜜行为。该算法通过模拟雇佣蜂、观察蜂和侦察蜂三种角色的分工协作来寻找最优解。在ABC算法中,每个潜在的解决方案被视为一个“食物源”,其质量由适应度函数评估。雇佣蜂负责在已知优质食物源附近进行局部开采;观察蜂根据雇佣蜂分享的信息,以一定概率选择并跟进优质食物源;侦察蜂则随机探索新区域,防止种群陷入局部最优。

qq_42212808的博客 393

关于解决使用STM32F407+LAN8742A的网线热插拔问题

原料 硬件 STM32F407ZGT6 LAN8742A 一根RJ45网线 软件 STM32CubeMX Keil v5.30 FreeRTOS 问题描述 STM32一侧作为client向server发送数据过程中,如果将网线直接拔掉再插上,就再也连接不上server,也就是说不支持网线热插拔。 解决办法 先使用STM32CubeMX生成工程文件 创建过程就不多讲了,和一般的工程没什么区别,请注意我这里是选用了FreeRTOS,另外需要注意的有以下两点: 勾选Middleware->LWIP

qq_27390767的博客 6588

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 795

脑电信号处理实战 01 | 从 0 跑通第一个 EEG 分析:加载、滤波、频谱与“睁眼闭眼“

本文以 UCI 公开数据集"EEG Eye State"为例,从零走通脑电处理的完整流水线——数据加载、1–40 Hz 带通滤波、Welch 功率谱、频带功率、通道相关性与箱线图质控、睁闭眼对比和时频分析,并用 8 张科研风格图层层揭示这份数据中的伪迹与通道重复问题,说明"流程跑得通不等于结果可信,质量控制永远先行"。

qq_53529450的博客 112

【STM32】socket通信代码解析

STM32 Socket通信是一种强大的网络通信解决方案,通过Socket编程技术,STM32微控制器可以实现与其他设备之间的数据交换和远程控制,为物联网、智能家居、远程监控等领域的应用提供了强有力的支持。

大雨淅淅的博客 1805

直流母线电压采集与缓冲调理电路

本文介绍了一种直流母线电压采集与缓冲调理电路的设计与应用。该电路通过电阻分压网络将高压直流母线电压降至适合ADC采样的范围,并采用运放电压跟随器实现高输入阻抗和低输出阻抗的缓冲功能,有效提高采样精度和抗干扰能力。文章重点阐述了低输出阻抗对驱动负载、抗干扰和电压稳定的重要性,并列举了该电路在工业电源监测、电动汽车BMS、通信电源和储能系统等领域的典型应用场景。

qq_37999850的博客 316

网络编程(12)套接字选项

前面介绍了有关套接字的UDP和TCP网络编程,程序中都是在套接字之后(未经特殊操作)直接使用的,此时是通过默认的套接字特性进行通信的。之前的示例都较为简单,无需操作套接字特性,但有时候必须修改。 获取和设置影响套接字的选项函数有:getsockopt和setsockopt函数,fcntl函数,ioctl函数。这里主要介绍getsockopt和setsockopt函数,另外还简单介绍fcntl函数。

热爱生活,忠于自己 1009

LLCC68芯片系统架构与LoRa驱动开发核心解析

LoRa射频收发器是低功耗广域物联网(LPWAN)的关键组件,其本质是集成了调制解调器、协议引擎、数据缓冲区与电源管理的专用SoC。理解其工作模式状态机(Sleep/Standby/TX/RX)与SPI主机接口时序规范,是实现稳定通信的基础。LLCC68通过寄存器映射与命令集双接口抽象硬件控制,支持LoRa扩频调制与FSK兼容模式,具备高链路预算(157 dB)和DC-DC/LDO动态电源切换能力。典型应用场景包括远距离传感器节点、智能表计与工业无线监测系统。本文深入剖析LLCC68的信号链路径、中断机制与

weixin_29859471的博客 281

ubuntu:E: 无法定位软件包yum解决方法

如果出现以下问题,则需要更新yum源 yum源位于/etc/apt/sources.list yum源更新的网站有 清华大学开源镜像 中科大开源镜像 1.此处更新yum源的时候先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo gedit /etc/apt/sources.list 将更新源替换成上面符合版本系列号 我用的版本号为20.04 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释

码农研究僧的博客 1万+

针对套接字关闭异常:Socket closed解决方案

本文告诉大家,菜鸟在编程中如何解决Socket closed问题

Mummy_1314的博客 2万+

最新Python爬虫实战(入门爬虫篇)——案例1:某瓣网站Top250图片数据采集(附上完整爬虫代码)

本次案例通过Python爬虫技术实现了某瓣Top250电影封面的批量下载。代码采用模块化设计,函数实现cookies的自动解析,简化了配置流程,涵盖请求、解析、存储的完整流程。学习重点包括:抓包工具定位数据源、正则表达式匹配图片链接、模拟请求头绕过反爬机制、以及自动化文件管理。需要注意控制请求频率并遵守网站使用规范,适用于入门爬虫实践。

努力让自己发光,对的人才能迎着光而来 16万+

优雅地断开套接字连接--套接字半关闭

基于TCP的半关闭单方面断开连接带来的问题                                    调用close函数断开连接,意味着完全断开连接,不仅无法传输数据,而且也不能接收数据。 套接字和流(Stream)两台主机通过套接字建立连接后进入可交换数据的状态。把建立套接字后可交换数据的状态看作一种流。为了实现双向通信,套接字生成的两个流。 针对优雅断开的shutdown函数shu...

amoscykl的博客 1251

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

优雅的断开套接字连接

摘要:本文详细探讨了TCP/UDP连接的优雅断开机制。重点介绍了TCP半关闭(shutdown)的概念与实现方法,包括SHUT_RD、SHUT_WR和SHUT_RDWR三种关闭模式的使用场景。文章还涉及SO_LINGER选项的应用技巧,以及跨平台实现、错误处理、性能优化等高级话题。针对不同协议(TCP/UDP)和场景(阻塞/非阻塞、多线程、HTTP等)提供了具体的关闭方案,并给出了完整的代码示例。最后介绍了连接池管理和批量关闭等优化技术,为开发者提供了全面的网络连接关闭最佳实践指南。

only_write_bug的博客 1581

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

7.渐入佳境 -- 优雅的断开套接字连接

TCP中的断开连接过程比建立连接过程更重要,因为连接过程中一般不会出现大的变数,但断开过程有可能发生预想不到的情况,因此应准确掌控。只有掌握了下面要讲解的半关闭(Half-close),才能明确断开过程。

suy123的博客 998

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux网络编程 - 优雅地断开TCP套接字连接

本博文将讨论如何优雅断开互相连接的套接字。之前用的方法不够优雅,是因为,我们是调用 close()函数单方面断开连接的。

yunfan 3681

Linux 网络编程(五)——如何优雅的断开套接字连接

调用 close 函数的会关闭 I/O 流,这样也会向对方发送 EOF ,但此时无法再接受对方传输的数据。例如,主机 A 发送完最后的数据后,调用 close 函数断开最后的连接,之后主机 A 无法再接受主机 B 传输的数据。最终,由主机 B 传输的、主机 A 必须要接受的数据也销毁了。我们假设这样一个场景:“一旦客户端连接到服务器端,服务器端将约定的文件传给客户端,客户端收到后发送字符串 “Thankyou' 给服务器端。其中一个主机的输入流与另一个主机的输出流相连,而输出流则与另一个主机的输入流相连。

m0_60875396的博客 759

07.优雅地断开套接字连接

优雅地断开套接字连接

izwmain的博客 693

day-05 TCP半关闭 ----- DNS ----- 套接字的选项

TCP的流是指,两台主机通过套接字建立连接后进入可交换数据的状态,也可称为”流形成的状态“。而对于UDP来说,不存在流,因为两个SOCKET不能相互连接。单方面的断开连接意味着套接字无法再发送数据。一般在对方有剩余数据未发送完成时,断开己方连接,会造成问题。半关闭是指只完成输入和输出流中的一个。而且,如果对输出流进行半关闭,EOF无法被传送到对方主机,己方套接字无法传送数据,但可以接收对方主机传送的数据。域名(Domain Name)是互联网上用于标识和定位网站、服务器或其他网络设备的字符串。

Ricardo的博客 1122

TCP/IP网络编程——优雅的断开套接字的连接

TCP/IP网络编程——优雅的断开套接字的连接

u011895157的博客 833

基于TCP的半关闭

基于TCP的半关闭 TCP练级的半关闭简而言之就是”关闭连接的一半”(只可以传递或接收数据)   套接字和流 两台主机通过套接字建立连接后进入可交换数据的状态(流形参的状态),即将建立套接字后可交换数据的状态看做一种流 套接字的流中,数据只能向一个方向移动,因此需要两个流进行双向通信(建立连接后的主机将拥有单独的输入流与输出流这两个相互独立的流,这两个流与连接上的另一个主机的输出流与输入

早起的虫儿灬 2003

优雅地断开套接字连接-----半关闭

之前用的方法不够优雅是因为,我们是调用close或closesocket函数单方面断开连接的。TCP中断开连接过程 比建立连接过程更重要,因为连接过程中一般不会出现大的边数,但断开过程有可能发生预想不到的情况,因此应准确掌控。只有掌握了下面要讲解的半关闭(Half-close),才能明确断开过程。 为了解决这类问题,“只关闭一部分数据交换中使用的流”(Half-close)的方法应运而生。断开一部分连接是指,可以传输数据但无法接收,或可以接收数据但无法传输。顾名思义就是只关闭流的一半。 一旦两台主机间建立了

weixin_53344209的博客 394

(第七章)优雅地断开套接字连接

七、TCP半关闭 套接字开启过程很简单,基本不会出现太大问题;但是在关闭套接字过程当中会出现各种意想不到的情况发生。因此需要单独说一下TCP套接字的关闭。 文章目录七、TCP半关闭7.1 单方面断开连接的问题7.2 针对优雅断开的shutdown函数7.3 为什么需要半关闭7.4 基于半关闭的文件传输程序 7.1 单方面断开连接的问题 在Linux系统当中调用close()关闭套接字意味着完全断开连接,如下图所示 在主机A给B发完信息之后,随即调用close()进行断开连接,此时主机B收到A的信息之

Mark_404的博客 928

C++网络编程(三):基于TCP的半关闭

目录调用close带来的问题半关闭的定义shutdown函数为何需要半关闭代码示例参考资料 调用close带来的问题 假设主机A、B正在进行双向通信,当主机A发送完最后数据,调用close断开连接,之后A无法再接收B传输的数据。因此,最终由B传输的、A必须接收的数据也销毁了。 为了解决这类问题,需要使用半关闭。 半关闭的定义 一旦两台主机建立了套接字连接,每个主机就会拥有单独的输入流、输出流,半关闭即只断开其中1个流,而非同时断开两个流。 shutdown函数 用于半关闭的函数为shutdown: #inc

weixin_44164489的博客 683

TCP半关闭 shutdown

TCP通信套接字设置半关闭状态

weixin_45684629的博客 1254
上一篇: (一)关于socket编程的一些基础数据类型
下一篇: (三)对套接字的设置参数进行设置
CallMeSumo
博客等级 码龄10年 82粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值