首页/新闻资讯/正文详情

【linux】第四天 TCP网络编程及Web服务器搭建

发布时间:2026/11/5 6:32:10 来源:云帆数科 栏目:资讯中心
【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/13 4:05:14

如何用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/9/27 23:33:28

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

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

【adb】AndroidStudio调试
【adb】AndroidStudio调试

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

编译过程理解
编译过程理解

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

零基础实现IEC61850(七)细说数据更新
零基础实现IEC61850(七)细说数据更新

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

KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动
KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动

KytyPS5 开源PS5模拟器完全指南:手把手在 PC 上编译并首次启动 【免费下载链接】KytyPS5 PlayStation 5 translation layer for Windows, Linux and macOS 项目地址: https://gitcode.com/gh_mirrors/ky/KytyPS5 想不装主机、直接在 PC 上玩 PS5 游戏&#x… · 2026/11/5 6:31:27

SuperSplat 高斯泼溅编辑 3 坑排查指南
SuperSplat 高斯泼溅编辑 3 坑排查指南

SuperSplat 高斯泼溅编辑 3 坑排查指南 【免费下载链接】super-splat 3D Gaussian Splat Editor 项目地址: https://gitcode.com/gh_mirrors/su/super-splat 在浏览器里直接做 3D Gaussian Splat 编辑的人,多半会先碰到 SuperSplat。真正卡人的很少是渲染&am… · 2026/11/5 6:31:27

Google Attestation Key
Google Attestation Key

1 简介 因为最近要用到这个,所以简单写写。 定义: Attestation Key是Android Key Attestation 的信任根,用来给设备TEE/StrongBox里的认证证书链做信任背书,让后端服务器可信地确认:这个密钥真的跑在安全硬件里&… · 2026/11/5 6:30:27

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码