【linux】第四天 TCP网络编程及Web服务器搭建
目录一、TCP客户端编程1、TCP的概述2、创建TCP套接字3、调用connect函数连接服务器4、send发送消息5、recv接收消息(默认阻塞)6、tcp客户端 收发数据​二、TCP服务器编程1、作为服务器的条件2、listen 监听函数3、accept提取客户端的连接(阻塞)三、close关闭套接字1、作为客户端2、作为服务器四、三次握手五、四次挥手六、并发服务器--多进程七、端口复用概述八、设置套接字端口复用九、并发服务器--多线程十、Web服务器一、TCP客户端编程1、TCP的概述客户端:主动连接服务器、和服务器进行通信服务器:被动被客户端连接,启动新的线程或进程 服务器客户端(并发服务器)2、创建TCP套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0);socket函数创建的TCP套接字,没有端口,默认为主动连接特性3、调用connect函数连接服务器tcp客户端通信之前 必须事先 建立和服务器的连接#include sys/types.h/* See NOTES */#include sys/socket.hint connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);addr地址结构体 存放的是服务器的IP、PORT 返回值:成功为0 失败-//连接服务器 struct sockaddr_in ser_addr; bzero(ser_addr, sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(8000); ser_addr.sin_addr.s_addr = inet_addr("10.9.11.251"); connect(sockfd, (struct sockaddr *)ser_addr, sizeof(ser_addr));如果sockfd没有固定端口 在调用connect时系统自动分配随机端口为源端口4、send发送消息ssize_t send(int sockfd, const void *buf, size_t len, int flags);sockfd:套接字buf:需要发送的字符串的首元素地址len:需要发送的字符串的实际长度flags:默认为0成功返回实际发送的字节数,失败返回-1注意:TCP并不能发送0长度报文,但是UDP可以5、recv接收消息(默认阻塞)#include sys/types.h#includesys/socket.hssize_t recv(int sockfd, void *buf, size_t len, int flags);sockfd:套接字buf:存放收到的消息len:最大能接收的长度flags:默认为0 成功返回收到的实际字节数, 失败返回-1recv如果收到0长度报文,表明对方已经断开连接。close(sockfd);断开连接6、tcp客户端 收发数据cilent.c#include stdio.h #include sys/socket.h #include unistd.h #include sys/types.h #include netinet/in.h #include string.h #include arpa/inet.h int main(int argc, char const *argv[]) { //创建TCP套接字 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd 0) { perror("socket"); return 0; } printf("sockfd = %d\n", sockfd); //连接服务器 struct sockaddr_in ser_addr; bzero(ser_addr, sizeof(ser_addr)); ser_addr.sin_family = AF_INET; ser_addr.sin_port = htons(8082); ser_addr.sin_addr.s_addr = inet_addr("192.168.172.179"); connect(sockfd, (struct sockaddr *)ser_addr, sizeof(ser_addr)); //send发送数据 send(sockfd, "hello tcp", strlen("hello tcp"), 0); //recv接收数据 unsigned char buf[1500] = ""; int len = recv(sockfd, buf, sizeof(buf), 0); printf("len=%d buf=%s\n", len, buf); //关闭套接字 close(sockfd); return 0; }NetAssist充当服务器:二、TCP服务器编程1、作为服务器的条件需要bind函数 为服务器绑定固定的端口、IP使用listen函数 让服务器套接字 由主动变被动。等待客户端的连接到来accept提取到来的客户端。2、listen 监听函数#includesys/types.h/* See NOTES */#includesys/socket.hint listen(int sockfd, int backlog); 功能:

相关新闻

贝叶斯参数估计

贝叶斯参数估计

贝叶斯估计是一种基于贝叶斯统计推断的参数估计方法,它利用先验知识和观测数据来推断参数的后验分布,并从中得出参数的估计值。贝叶斯估计的核心思想是将参数视为随机变量,而不是固定但未知的常数,从而能够更好地处理不确定性。 贝…

2026/7/26 18:57:23阅读更多 →
如何用25美元打造AI智能眼镜:OpenGlass开源方案完整指南

如何用25美元打造AI智能眼镜:OpenGlass开源方案完整指南

如何用25美元打造AI智能眼镜:OpenGlass开源方案完整指南 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 想要拥有一副能够识别物体、翻译文字、记录生活的智能眼镜…

2026/7/26 18:57:23阅读更多 →
Speechless进阶技巧:原创微博筛选+高清图片设置,打造专属备份方案

Speechless进阶技巧:原创微博筛选+高清图片设置,打造专属备份方案

Speechless进阶技巧:原创微博筛选高清图片设置,打造专属备份方案 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless Speechless是…

2026/7/26 18:57:23阅读更多 →
Android Animated Theme Manager:打造会呼吸的动态主题,让你的App瞬间吸睛

Android Animated Theme Manager:打造会呼吸的动态主题,让你的App瞬间吸睛

Android Animated Theme Manager:打造会呼吸的动态主题,让你的App瞬间吸睛 【免费下载链接】Android-Animated-Theme-Manager create your custom themes and change them dynamically with ripple animation 项目地址: https://gitcode.com/gh_mirror…

2026/7/26 20:27:39阅读更多 →
CentOS系统OpenSSH一键升级脚本设计与实现

CentOS系统OpenSSH一键升级脚本设计与实现

1. 项目背景与核心价值在Linux服务器运维领域,SSH服务的安全性直接关系到整个系统的防护等级。近期OpenSSH爆出的多个高危漏洞(如CVE-2023-38408等)让不少使用CentOS系统的管理员头疼不已。传统的手动升级方式需要经历下载源码、解决依赖、编…

2026/7/26 20:27:39阅读更多 →
2026年AI降重工具横评:哪款改完还能保持「人味」?

2026年AI降重工具横评:哪款改完还能保持「人味」?

查重报告42%,ddl只剩48小时,手动改写到天亮也改不完。这种时刻,AI降重工具就是救命稻草——但稻草也有好坏:有的改完语句通顺、重复率真降了;有的改完前言不搭后语,导师看了血压飙升。一句话答案&#xff1…

2026/7/26 20:27:39阅读更多 →
learn-rust-101社区指南:加入Rustacean大家庭的5种方式

learn-rust-101社区指南:加入Rustacean大家庭的5种方式

learn-rust-101社区指南:加入Rustacean大家庭的5种方式 【免费下载链接】learn-rust-101 A guide to aid you in your journey of becoming a Rustacean (Rust developer). 项目地址: https://gitcode.com/gh_mirrors/le/learn-rust-101 learn-rust-101是一…

2026/7/26 20:27:39阅读更多 →
AI驱动数据资产评估:技术架构与落地实践

AI驱动数据资产评估:技术架构与落地实践

1. 数据资产评估的现状与挑战数据资产作为企业数字化转型的核心要素,其价值评估一直是企业决策的重要依据。传统的数据资产评估方法主要依赖于人工统计、抽样分析和专家经验判断,这种模式在当今数据爆炸式增长的环境下正面临严峻挑战。我曾在某金融机构参…

2026/7/26 20:27:39阅读更多 →
ProxyMan支持哪些应用?一文了解apt、npm、git等工具的代理设置

ProxyMan支持哪些应用?一文了解apt、npm、git等工具的代理设置

ProxyMan支持哪些应用?一文了解apt、npm、git等工具的代理设置 【免费下载链接】ProxyMan Configuring proxy settings made easy. 项目地址: https://gitcode.com/gh_mirrors/pro/ProxyMan ProxyMan是一款强大的代理设置工具,能够帮助用户轻松配…

2026/7/26 20:25:39阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/26 0:01:28阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/26 0:01:28阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/26 0:01:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →