当前位置: 首页 > news >正文

儿童教育 php模板 网站一个新品牌如何推广

儿童教育 php模板 网站,一个新品牌如何推广,子网站建设工作,福州设计公司1、概述下面问题你会怎么回答?希望发完一个数据后关闭连接,且希望对端的应用层尽量收到?代码可以这么写么?send(fd, buf, .....);close(fd);2、分析上述代码是不行的,send返回成功仅表示数据拷贝到内核tcp发送缓冲区,…

1、概述

下面问题你会怎么回答?

希望发完一个数据后关闭连接,且希望对端的应用层尽量收到?代码可以这么写么?

send(fd, buf, .....);

close(fd);

2、分析

上述代码是不行的,send返回成功仅表示数据拷贝到内核tcp发送缓冲区,不代表数据发送到对端;直接调用close会导致内核缓冲区未发送的数据被丢弃,无法保证对端完整接收。

2.1、解决办法

2.1.1、Linger选项

Linger选项是控制socket关闭时的行为,当设置Linger选项后,调用close函数时若内核缓冲区还有数据,会等待指定时间,如果等待时间内数据未能成功发送,这些缓冲区数据会被丢弃。
Linger选项结构体,调用setsockopt设置,如下:

typedef struct linger {u_short l_onoff; //0关闭,1打开,默认是关闭的u_short l_linger;
} LINGER, *PLINGER, *LPLINGER;
struct linger ling;
ling.l_onoff = 1;    // 0关闭,1打开
ling.l_linger = 30;  // 等待 30 秒,超时强制关闭setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));// 阻塞直到 30 秒,或数据发完
int ret = close(sockfd);

这里会有俩种情况,

等待时间足够长,数据可以成功发送。(服务端一般不允许设置长时间等待,可能会耗尽资源)

等待时间短,可能出现数据部分发送成功或全部被丢弃的情况。

所以Linger选项可以是我们的备选方案。

2.1.2、shutdown(SH_WR)

socket工作是全双工的,读和写是分别独立的。

shutdown函数可以单独关闭读或写方向,close是关闭整个连接。

// how是SHUT_RD,本端读通道关闭,对端不能再写数据
// how是SHUT_WD,本端写通道关闭,对端不能再读数据
int shutdown(int sockfd, int how);

调用完send发送数据,可以调用shutdown(fd, SHUT_WD)告诉对端数据发送完毕,但接收通道仍开放。对端应用层收完数据后会回复ack,并调用close函数,此时可以安全调用close函数关闭连接。这是tcp半关闭问题!!!,感兴趣读者可再深入学习。

示例代码如下:

【服务端】

// 1. 发送数据
if (send(sockfd, data, len, 0) < 0) {perror("send failed");close(sockfd);return;
}// 2. 【关键】关闭写方向,通知对端“我发完了”
if (shutdown(sockfd, SHUT_WR) < 0) {perror("shutdown failed");close(sockfd);return;
}
// 此时本端不能 send() 了,但还能 recv()// 3. 等待对端的应用层确认(ACK)
char ack[4];
ssize_t n = recv(sockfd, ack, sizeof(ack), 0);
if (n > 0 && memcmp(ack, "ACK", 3) == 0) {printf("Received ACK from client, data processed.\n");
} else {printf("No ACK received.\n");
}// 4. 安全关闭
close(sockfd);

【客户端】

// 客户端 recv 到所有数据后
char buf[1];
while (recv(sockfd, buf, 1, 0) > 0) {// 处理数据
}// recv 返回 0,表示对端 shutdown(SHUT_WR),数据发送完毕
printf("Server finished sending data.\n");// 发送 ACK 确认
send(sockfd, "ACK", 3, 0);// 可以 close
close(sockfd);

学习链接:https://github.com/0voice

http://www.dtcms.com/a/489898.html

相关文章:

  • 广州网站建设工程工信部 网站备案
  • 太原建站模板系统asp网站
  • 有经验的常州网站建设《企业宣传片制作》
  • 网站建设公司的发展规划呼和浩特做网站的公司
  • 做视频网站挣钱吗网站设计流程大致分为几个阶段
  • 做网站价格 网络推广托管服务直播视频怎么录制
  • 网站建设费进什么科目中小企业网站的建设实践报告
  • 网站被墙了怎么办设计网站教程
  • 赣州建设监督网站个人管理系统
  • 苏州市做网站dw设计网页步骤
  • 青岛天河小学网站建设茂南网站建设公司
  • 儿童网站建设外文翻译个人网站建设论文
  • 西宁那有做网站的登录百度账号
  • 安徽网站公司网站深圳品牌网站设计推广
  • 龙岩做网站公司哪家好广告策划书的内容
  • 北京专业网站翻译影音字幕翻译速记速记速记速而高效常用网站推广方式有哪些
  • DW自动生成代码做网站第五次普查数据自网站怎么做
  • 自建网站平台可以实现哪些功能wordpress分页模板
  • 青岛定制网站设计公司东莞网站设计及拍摄方案公司
  • seo博客网站怎么做网站建设首选智投未来1
  • 网站建设课程ppt视频网站开发工具
  • 长沙公司网站建立北京海淀房管局网站
  • 网站建设是广告吗做内贸注册什么网站
  • 淘宝客网站静态还是动态好深圳网站网站开发
  • 企业网站建站开封建网站的公司
  • 能添加网站的导航美食教做网站
  • 一键生成logo的网站优化大师下载电脑版
  • 内蒙古住房和城乡建设网站上海高端网站制作公司
  • 深圳网站建设需要多少钱营销网站建设规划概念
  • 如何更改网站备案号信誉好的盐城网站开发