【linux】第四天 TCP网络编程及Web服务器搭建
📅 2026/7/26 18:56:57
👁️ 次浏览
目录一、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); 功能:
3分钟创作你的第一首AI歌曲:腾讯SongGeneration让音乐梦想触手可及 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目,基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术,既能融合人声与伴奏达到和谐统一&…
📅 2026/7/26 18:55:57
如何5分钟完成Axure RP中文界面汉化:终极完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn
还在为Axure RP复杂…
📅 2026/7/26 18:55:57
Speechless原理大揭秘:Chrome插件如何实现微博内容的高效抓取与PDF转换 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless
Speechless是一款…
📅 2026/7/26 18:55:57
1. 项目背景与核心价值牙齿健康识别这个课题乍看简单,实则包含了计算机视觉在医疗领域落地的典型挑战。我在三甲医院口腔科做过为期半年的技术调研,发现临床上对龋齿、牙周炎等常见问题的早期筛查存在两个痛点:一是基层医疗机构缺乏专业医师&…
📅 2026/7/26 19:55:25
1. PRCM模块在CC13x2/CC26x2中的核心地位与设计哲学如果你正在使用TI的CC13x2或CC26x2系列无线MCU开发物联网设备,那么电源、复位和时钟管理(PRCM)模块绝对是你绕不开的核心。这不仅仅是手册里一个枯燥的章节,而是决定你产品电池寿…
📅 2026/7/26 19:55:25
1. 项目概述:从Windows的“舒适区”到全平台的挑战 干了十几年C开发,从早期的VC6到现在的Visual Studio 2022,我几乎所有的项目都泡在微软的生态里。VC(现在更常叫MSVC)这套工具链,从MFC到ATL,再…
📅 2026/7/26 19:55:25
1. AI原生应用体验优化的核心挑战在2023年的AI应用爆发潮中,我们发现一个有趣的现象:超过67%的用户在首次使用AI产品后的7天内流失。这个数字背后暴露的正是当前AI原生应用面临的最大痛点——技术先进性与用户体验之间的断层。作为深度参与过12款AI产品设…
📅 2026/7/26 19:55:25
Noi浏览器:5分钟掌握AI助手的终极使用指南 【免费下载链接】Noi 🚀 Less chaos. More flow. 项目地址: https://gitcode.com/GitHub_Trending/no/Noi
还在为AI助手的使用效率而烦恼吗?想要快速掌握Noi浏览器的所有强大功能?…
📅 2026/7/26 19:55:25
昨晚熬夜弄这个geo_craig90 v6,头发掉了一把。真的,别信那些吹嘘“一键安装”的软文,全是扯淡。我自己在本地环境试了快十次,中间还因为版本不兼容把数据库搞崩了两次,最后才跑通。今天趁热乎,把那些没写进文档的坑都扒出来,给想入坑的朋友提个醒。先说环境吧。很多人上…
📅 2026/7/26 19:54:08
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/26 7:10:22
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/26 17:10:53
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/26 5:10:17