网络编程:基于TCP和UDP的服务器、客户端
1.基于TCP通信服务器
程序代码:
1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//服务器IP3 #define SER_PORT 8888//服务器端口号4 int main(int argc, const char *argv[])5 {6 //1.创建用于监听的套接字7 int sfd=-1;8 sfd=socket(AF_INET,SOCK_STREAM,0);9 //参数1:IPv4的通信10 //参数2:使用TCP通信类型11 //参数3:参数2以确定通信类型,012 if(sfd==-1)13 {14 perror("socket error");15 return -1;16 }17 printf("sfd=%d\n",sfd);//3 返回文件描述符,最小分配原则18 //2.绑定IP地址和端口号19 //2.1填充地址信息结构体20 struct sockaddr_in sin;21 sin.sin_family=AF_INET;//地址族22 sin.sin_port=htons(SER_PORT);//要2字节无符号整数端口号(网络字节序)23 //将主机字节序转换为网络字节序24 sin.sin_addr.s_addr=inet_addr(SER_IP);//IP地址(sin的sin_addr的s_addr)25 //要IP地址的网络字节序,将点分十进制数据转换为4字节无符号整数的网络字节序26 //2.2绑定27 if(bind(sfd,(struct sockaddr *)&sin,sizeof(sin))==-1)28 //要绑定的套接字文件描述符,通用地址信号结构体,结构体大小29 {30 perror("bind error");31 return -1;32 }33 printf("bind success\n");34 //3.启动监听,允许客户端连接35 if(listen(sfd,128)==-1)36 {37 perror("listen error");38 return -1;39 }40 printf("listen success\n");41 //4.客户端发来连接请求后,创建新的用于通信的套接字42 //不想接收客户端地址信息结构体,则无需传参2,参343 //想要获取客户端地址信息结构体,要传入相关参数44 struct sockaddr_in cin;//用于接收客户端地址信息结构体45 socklen_t socklen=sizeof(cin);//用于接收客户端地址信息大小46 int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);47 //阻塞等待客户端请求,客户端发来连接请求后,创建新的套接字,返回套接字文件描述符48 //参数1:服务器套接字文件描述符49 //参数2:通用地址信号结构体,接收最新连接的客户端地址信息50 //参数3:客户端套接字大小,地址传递51 if(newfd==-1)//成功返回套接字文件描述符,失败-152 {53 perror("accept error");54 return -1;55 }56 printf("newfd=%d您有新的客户已经上线\n",newfd);57 printf("客户端IP:%s,端口号:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));58 //将IP地址的网络字节序(4字节无符号整数)转换为点分十进制字符串(IP地址的网络字节序)59 //将端口的网络字节序(2字节无符号整数)转换为主机字节序(端口的网络字节序)60 //5.通信套接字与客户端进行数据收发61 char rbuf[128]="";62 while(1)63 {64 //清空容器65 bzero(rbuf,sizeof(rbuf));66 //从套接字中读取数据67 int res=read(newfd,rbuf,sizeof(rbuf));68 if(res==0)69 {70 printf("客户端已下线\n");71 break;72 }73 printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);74 //将收到的消息加上其他字符回过去75 strcat(rbuf,"*_*");76 write(newfd,rbuf,strlen(rbuf));77 }78 //6.关闭套接字79 close(newfd);80 close(sfd);81 return 0;82 }
运行结果:

2. 基于TCP通信客户端
程序代码:
1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//服务器IP3 #define SER_PORT 8888//服务器端口号4 int main(int argc, const char *argv[])5 {6 //1.创建用于通信的套接字文件描述符7 int cfd=socket(AF_INET,SOCK_STREAM,0);8 //使用IPv4通信,使用TCP通信类型,已确定通信类型09 if(cfd==-1)10 {11 perror("socket error");12 return -1;13 }14 printf("cfd=%d\n",cfd);//返回文件描述符,最小分配315 //2.绑定(不写系统默认绑定)16 //3.连接服务器17 //3.1填充要连接的服务器地址信息结构体18 struct sockaddr_in sin;19 sin.sin_family=AF_INET;//地址族20 sin.sin_port=htons(SER_PORT);//端口号21 sin.sin_addr.s_addr=inet_addr(SER_IP);//IP地址22 //3.2连接服务器23 if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)24 {25 perror("connect error");26 return -1;27 }28 printf("connect success\n");29 //4数据收发30 char wbuf[128]="";31 while(1)32 {33 //清空数据34 bzero(wbuf,sizeof(wbuf));35 printf("请输入>>>");36 fgets(wbuf,sizeof(wbuf),stdin);//终端输入37 wbuf[strlen(wbuf)-1]=0;38 //将数据发送给服务器39 send(cfd,wbuf,strlen(wbuf),0);40 printf("发送成功\n");41 if(strcmp(wbuf,"quit")==0)42 break;43 //接收服务器发来的消息44 //清空数据45 bzero(wbuf,sizeof(wbuf));46 recv(cfd,wbuf,sizeof(wbuf),0);47 printf("收到消息为;%s\n",wbuf);48 }49 //5.关闭套接字50 close(cfd);51 return 0;52 }
~
运行结果:

3.基于UDP通信服务器
程序代码:
1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//服务器IP3 #define SER_PORT 8888//服务器端口号4 int main(int argc, const char *argv[])5 {6 //1.创建用于通信的套接字7 int sfd=socket(AF_INET,SOCK_DGRAM,0);8 if(sfd==-1)9 {10 perror("socket error");11 return -1;12 }13 printf("sfd=%d\n",sfd);14 //2.绑定IP地址和端口号15 //2.1填充地址信息结构体16 struct sockaddr_in sin;17 sin.sin_family=AF_INET;//地址族18 sin.sin_port=htons(SER_PORT);//端口号19 sin.sin_addr.s_addr=inet_addr(SER_IP);//IP地址20 //2.2绑定21 if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)22 {23 perror("bind error");24 return -1;25 }26 printf("bind success\n");27 //3.收发数据28 char rbuf[128]="";29 //定义容器接收对端地址信息结构体30 struct sockaddr_in cin;31 socklen_t socklen=sizeof(cin);32 while(1)33 {34 //清空数组35 bzero(rbuf,sizeof(rbuf));36 //接收数据37 recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen);38 printf("收到消息为:%s\n",rbuf);39 //将消息加*_*回过去40 strcat(rbuf,"*_*");41 if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,socklen)=42 {43 perror("sendto error");44 return -1;45 }46 }47 //4.关闭套接字48 close(sfd);49 return 0;50 }
运行结果:

4.基于UDP的客户端
程序代码:
1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//IP地址3 #define SER_PORT 8888//服务器端口4 int main(int argc, const char *argv[])5 {6 //1.创建用于通信的套接字7 int cfd=socket(AF_INET,SOCK_DGRAM,0);8 if(cfd==-1)9 {10 perror("socket error");11 return -1;12 }13 printf("cfd=%d\n",cfd);14 //2.绑定IP地址和端口号15 //非必要16 //3.收发数据17 char wbuf[128]="";18 //定义容器,记录服务器的地址信息结构体19 struct sockaddr_in sin;20 sin.sin_family=AF_INET;21 sin.sin_port=htons(SER_PORT);22 sin.sin_addr.s_addr=inet_addr(SER_IP);23 while(1)24 {25 //清空数组26 bzero(wbuf,sizeof(wbuf));27 //从终端获取数据28 printf("请输入>>>");29 fgets(wbuf,sizeof(wbuf),stdin);30 wbuf[strlen(wbuf)-1]=0;31 //将数据发送给服务器32 sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,sizeof(sin));33 printf("发送成功\n");34 //接收服务器回复的消息35 bzero(wbuf,sizeof(wbuf));36 recvfrom(cfd,wbuf,sizeof(wbuf),0,NULL,NULL);37 printf("收到消息:%s\n",wbuf);38 }39 //关闭套接字40 close(cfd);41 return 0;42 }
运行结果:
流程图:

面试:

相关文章:
网络编程:基于TCP和UDP的服务器、客户端
1.基于TCP通信服务器 程序代码: 1 #include<myhead.h>2 #define SER_IP "192.168.126.121"//服务器IP3 #define SER_PORT 8888//服务器端口号4 int main(int argc, const char *argv[])5 {6 //1.创建用于监听的套接字7 int sfd-1;8 sf…...
kubectl 命令行管理K8S(上)
目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 应用发布策略 金丝雀发布 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源…...
Redis 之四:Redis 事务和乐观锁
事务特点 Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。不具备原子性。 在事务执…...
C# WPF编程-创建项目
1.创建新项目 选择“WPF应用程序”》“下一步” 设置项目 设置项目名称,保存位置等参数>下一步 3.选择框架 4.项目创建成功 5.运行项目...
密码学及其应用(应用篇15)——0/1背包问题
1 问题背景 背包问题是一个经典的优化问题,在计算机科学和运筹学中有着广泛的应用。具体到你提到的这个问题,它是背包问题中的一个特例,通常被称为0/1背包问题。这里,我们有一系列的正整数 ,以及一个正整数,…...
基于springboot+vue的实验室管理系统(前后端分离)
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
华为OD技术面试案例5-2024年
背景 985本计算机专业,目标院校。 1.15 投递 在某BOSS上投递的简历,HR人很nice,非常负责任。 1.19 收到机试通知 第一题是一个哈夫曼编码,第三题是一个动态规划,机试整体难度不算高,刷leetcode hot100…...
【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】
文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…...
Unity(第二十部)效果 粒子、线条和拖尾
1、粒子系统 粒子系统介绍 Unity 粒子系统是 Unity 引擎中用于创建和控制粒子效果的工具。它可以模拟各种自然现象,如火焰、烟雾、雨滴等,也可以用于创建特效,如魔法光芒、爆炸效果等。 粒子系统组成 在 Unity 中,粒子系统由发射…...
全量知识系统问题及SmartChat给出的答复 之6 三套工具之1
Q15. 提出想法和问题 前面说过,DDD在我要设计的全量知识系统中位于中间层,是专门用来解决“知识汤”问题的。 解决的思路就是以将为在特定领域中的公司经营提供一个责任-权限平面为目的,帮助他们调整商业模式以及组建恰当的组织,…...
[RoarCTF 2019]Easy Calc
这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解:PHP字符串解析特性 ($GET/$POST参数绕过)(含例题 buuctf easycalc)_参数解析 绕过-CSDN博客 ascii码查询表:ASCII 表 | 菜鸟工具 …...
完美解决 git 报错fatal: Not a git repository (or any of the parent directories): .git
问题描述 错误提示是找不到.git文件,无法执行git指令,意思是 当前你要提交的文件夹中没有.git这个文件 解决方案 执行如下命令: git init...
electron无法设置自己的图标?渲染进程require报错?
electron无法设置自己的图标? 极有可能是图标太大,或者宽高不同 我推荐的网址icon转换 选着20x20一般就可以 渲染进程无法使用require?一直报错? webPreferences: {nodeIntegration: true, enableRemoteModule: true, contextIsolation: …...
vscode连接服务器与FileZilla上传到服务器
https://www.cnblogs.com/qiuhlee/p/17729647.html(这个是vscode连接服务器) 主机:就是服务器的主机号 使用者名称:比如ALmax的用户名 密码:比如ALmax的密码...
练习 1 Web EasySQL极客大挑战
CTF Week 1 EasySQL极客大挑战 BUUCTF 典中典复习 Web SQL 先尝试输入,找一找交互页面 check.php 尝试万能语句 a’ or true SQL注入:#和–的作用 get传参只能是url编码,注意修改编码,输入的字符串要改成url格式。 POST请求和…...
matlab生成模拟的通信信号
matlab中rand函数生成均匀随机分布的随机数,randn生成正态分布的随机数; matlab来模拟一个通信信号; 通信信号通过信道时,研究时认为它会被叠加上服从正态分布的噪声; 先生成随机信号模拟要传输的信号,s…...
Altair® SimLab® 以流程为导向的多学科仿真环境,可连接CAD 的多物理场工作流程
Altair SimLab 以流程为导向的多学科仿真环境,可连接CAD 的多物理场工作流程 SimLab 是一种以流程为导向的多学科仿真环境,能够精确分析复杂装配体的性能表现。包括结构、热和流体动力学在内的多物理场可以通过高度自动化的建模任务轻松设置,有助于大幅…...
Python爬虫-爬取B站番剧封面
本文是本人最近学习Python爬虫所做的小练习。如有侵权,请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…...
AI时代的产品文案秘籍:如何用AI提升效率
人工智能写作工具:解放双手,创作不停歇 在当前人工智能技术飞速发展的背景下,越来越多的个体已经开始利用这一AI写作工具,以显著提高自己的工作效率。这不仅标志着人工智能服务于人类的宏伟时代的到来,更是人人可用的创…...
前端架构: 脚手架通用框架封装之入口文件开发(教程一)
脚手架入口文件开发 创建脚手架项目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安装 lerna, $ npm i -g lerna 基于 lerna 完成项目初始化 $ lerna init 基于 lerna 创建脚手架 cli $ lerna create cli一路回车 好现在生成了一个 cli 的模板,目前需要…...
如何通过Intel NPU加速库实现10倍AI推理性能提升
如何通过Intel NPU加速库实现10倍AI推理性能提升 【免费下载链接】intel-npu-acceleration-library Intel NPU Acceleration Library 项目地址: https://gitcode.com/gh_mirrors/in/intel-npu-acceleration-library Intel NPU加速库是为AI开发者设计的硬件加速解决方案&…...
开源项目管理平台OpenProject:从协作困境到团队效能的智能转型引擎
开源项目管理平台OpenProject:从协作困境到团队效能的智能转型引擎 【免费下载链接】openproject OpenProject is the leading open source project management software. 项目地址: https://gitcode.com/GitHub_Trending/op/openproject 在数字化转型浪潮中…...
【硕博进】哪些降重软件可以同时降低查重率和AIGC疑似率?2026年爆款论文降重工具实测TOP5,AIGC率最低降至5%!
【CSDN博主按】 “博主救命!距离盲审提交只剩3天,知网查重过了,但系统附带的『AIGC(人工智能生成内容)疑似率报告』直接飙到了89%!导师发火说痕迹太重,按学院新要求直接算学术不端,我…...
你的微信聊天记录值得永久珍藏吗?WeChatMsg开源工具实现数据自主管理
你的微信聊天记录值得永久珍藏吗?WeChatMsg开源工具实现数据自主管理 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...
用Python+Excel搞定大学物理实验报告:扭摆法测切变模量数据处理全流程
PythonExcel自动化处理扭摆法实验数据:从原始测量到切变模量计算全指南 理工科学生最头疼的莫过于物理实验报告的数据处理环节——面对密密麻麻的测量数据,手动计算不仅耗时费力,还容易出错。以扭摆法测切变模量为例,传统方法需要…...
保姆级教程:手把手教你排查QFIL刷机时‘找不到sec.dat‘等文件错误
高通QFIL刷机实战:彻底解决"sec.dat缺失"等文件报错问题 遇到QFIL刷机时弹出"找不到sec.dat"的错误提示,就像在高速公路上突然爆胎——既让人焦虑又不得不立即处理。这种问题通常发生在使用第三方刷机包时,配置文件与实际…...
B站m4s视频转换终极指南:3步实现无损格式转换与永久保存
B站m4s视频转换终极指南:3步实现无损格式转换与永久保存 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站视频下架而烦恼吗&…...
MATLAB绘图效率大比拼:三种函数表达式绘图方法实测(附代码)
MATLAB绘图效率优化:三种函数表达式绘图方法深度评测与实战技巧 在科学计算和数据分析领域,MATLAB作为一款强大的数值计算工具,其绘图功能的质量和效率直接影响着研究工作的流畅度。对于经常需要处理函数表达式绘图的用户来说,选择…...
ESP32连接PS3手柄总失败?试试这个Windows配对+MAC修改的保姆级流程
ESP32连接PS3手柄全流程指南:从Windows配对到MAC修改的终极解决方案 在智能硬件开发领域,ESP32凭借其出色的性价比和丰富的功能接口,已经成为众多创客和开发者的首选。而PS3手柄作为经典的游戏控制器,其蓝牙功能为各种DIY项目提供…...
批量图片处理实战:千峰办公助手图像处理功能的技术指南
在数字化内容创作和互联网应用开发中,图片是最常用也是占用资源最多的媒体类型之一。 无论是网站设计、移动应用开发、电商平台运营,还是自媒体内容制作,都离不开对图片的处理和优化。 然而,当面对成百上千张图片需要统一处理时…...
