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

站群网站程序网站建设预付

站群网站程序,网站建设预付,网站建设的教材,如何写网站建设方案欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 端口复用专栏:《Linux从小白到大神》《网络编程》 在前面讲解TCP状态转换中提到过一个2MSL…

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。


端口复用


专栏:《Linux从小白到大神》《网络编程》


在前面讲解TCP状态转换中提到过一个2MSL等待时间,如果在通信过程中,server主动断开连接,那么server进程会处于TIME_WAIT状态并等待2MSL的时间,此时server进程还没终止,端口号port还被该进程占用呢,所以当server主动断开连接时,如果立即再次启动server,就会提示端口已经被使用,等待2MSL后才可以再次启动server。请看下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zo7nrnpR-1678152932965)(Typora_picture_reference/1662117267500.png)]

端口复用常见的用途包括:

  • 防止服务器重启时,之前绑定的端口还未释放;
  • 程序突然退出系统但是没有释放端口。

设置端口复用需要用到的API如下:

int opt = 1;  
setsockopt(sockfd, SOL_SOCKET,  SO_REUSEADDR, (const void *)&opt, sizeof(opt)); 
  • sockfd:监听的文件描述符

  • SOL_SOCKET:级别

  • SO_REUSEADDR:也可以用SO_REUSEPORT

  • opt:赋值为1表示属性被启用

  • sizeof(opt):

相关参数设置及含义可在下图中查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxaj6ADy-1678152932966)(Typora_picture_reference/1662117398003.png)]

在设置端口复用时,需要注意的是,必须在绑定端口之前就设置端口复用属性。实际上setsockopt()函数有很多功能,设置端口复用只是它的功能之一。

下面是一个设置端口复用的示例

#include <stdio.h>
#include <ctype.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/socket.h>// server
int main(int argc, const char* argv[])
{// 创建监听的套接字int lfd = socket(AF_INET, SOCK_STREAM, 0);if(lfd == -1){perror("socket error");exit(1);}// 绑定struct sockaddr_in serv_addr;memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(9999);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);  // 本地多有的IP// 127.0.0.1// inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr.s_addr);// 设置端口复用 // 需要在bind函数之前设置int opt = 1;setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, (void*)&opt, sizeof(opt));// 绑定端口int ret = bind(lfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));if(ret == -1){perror("bind error");exit(1);}// 监听ret = listen(lfd, 64);if(ret == -1){perror("listen error");exit(1);}// 阻塞等待连接请求, 并接受连接请求struct sockaddr_in clien_addr;socklen_t clien_len = sizeof(clien_addr);int cfd = accept(lfd, (struct sockaddr*)&clien_addr, &clien_len);if(cfd == -1){perror("accetp error");exit(1);}char ipbuf[128];printf("client iP: %s, port: %d\n", inet_ntop(AF_INET, &clien_addr.sin_addr.s_addr, ipbuf, sizeof(ipbuf)),ntohs(clien_addr.sin_port));char buf[1024] = {0};while(1){// read data// int len = read(cfd, buf, sizeof(buf));int len = recv(cfd, buf, sizeof(buf), 0);if(len == -1){perror("recv error");exit(1);}else if(len == 0){printf("客户端已经断开连接。。。\n");break;}printf("read buf = %s\n", buf);// 小写转大写for(int i=0; i<len; ++i){buf[i] = toupper(buf[i]);}printf("after buf = %s\n", buf);// 大写串发给客户端// write(cfd, buf, strlen(buf)+1);ret = send(cfd, buf, strlen(buf)+1, 0);if(ret == -1){perror("send error");exit(1);}}close(cfd);close(lfd);return 0;
}

在这里插入图片描述
在这里插入图片描述


http://www.yayakq.cn/news/62902/

相关文章:

  • 安全狗iis版删了以后 网站打不开秋林 做网站
  • 查询网站建设在线购物网站的设计与实现
  • 怎么做网站中英文版本通江县网站建设
  • 做视频网站带宽中企动力洛阳分公司
  • 吧网站做软件的软件浙江温州乐清
  • 织梦网站怎样入侵做网站的服务器还需要空间吗
  • 网站内容体系网站备案主体黑名单
  • 最简单的网站开发软件程序开发是什么专业
  • 网站的基本组成部分有哪些内容北京网站建设小程序开发
  • 女生学网站建设好学吗wordpress快速清除本地图片
  • 北京规划建设 杂志 官方网站天津网站优化排名
  • 网站开发常用的流程建设厅网站进不去
  • cgi做的网站哈尔滨专门做网站
  • 做网站怎样赚到钱怎么做网站出肉狗
  • 个体工商户注册网站微信app下载安卓版官方下载
  • 邢台专业网站建设公司推荐手机模板素材图片
  • 网站建设代理网站杭州品牌网站建设推广
  • 成都网站建设找重庆最佳科技wordpress如何抓取
  • 网站建设在哪能看网站页面分析范文
  • 在线课程网站开发的研究意义短视频运营公司网站建设
  • 石家庄网站建设雨点牛微网站开发腾讯
  • 高端网站建站公司建设网站需要买什么手续费
  • 如何用dw建立网站网站建设网络公
  • 苏州网站建设找哪家建企业网站哪个平台好
  • 石家庄信息门户网站制作费用昆明网络科技公司有哪些
  • 在线免费网站建设百度做广告多少钱一天
  • 江苏网站建设哪家专业山东助企网站建设
  • 网站分别建网站做淘宝客可以吗
  • seo全站优化全案例wordpress封面图插件
  • 企业网站功能盐田区住房和建设局网站