【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/10/25 15:35:03 阅读更多 →
如何用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/10/25 1:58:32 阅读更多 →
Speechless原理大揭秘:Chrome插件如何实现微博内容的高效抓取与PDF转换

Speechless原理大揭秘:Chrome插件如何实现微博内容的高效抓取与PDF转换

Speechless原理大揭秘:Chrome插件如何实现微博内容的高效抓取与PDF转换 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless Speechless是一款…

2026/10/24 23:04:41 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →