网络编程day2

1.思维导图

2.TCP通信模型

tcpSer.c

#include<myhead.h>
#define SER_IP "192.168.159.143"
#define SER_PORT 5678
int main(int argc, const char *argv[])
{//1.创建用于监听的套接字int sfd=-1;sfd=socket(AF_INET,SOCK_STREAM,0);//参数1:表示使用的是IPv4的通信协议//参数2:表示使用tcp通信类型//参数3:表示前面已经特定了通信协议if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//2.绑定IP地址和端口号//2.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;   //地址族sin.sin_port=htons(SER_PORT);    //端口号sin.sin_addr.s_addr=inet_addr(SER_IP);   //IP地址//2.2.绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.启动监听,允许客户端连接if(listen(sfd,128)==-1){perror("listen error");return -1;}printf("listen success\n");//4.当有客户端发来连接请求后,创建新的用于通信的套接字//如果不想接收客户端地址信息结构体,则无需传入参数2和参数3//如果想要获取客户端地址信息结构体,则需传入相关参数struct sockaddr_in cin;     //用于接收客户端地址信息结构体socklen_t socklen=sizeof(cin);    //用于接收客户端地址信息的大小int newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);if(newfd==-1){perror("accept error");return -1;}printf("newfd=%d 您有新的客户已经上线\n",newfd);printf("客户端IP:%s,端口号为:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));//5.通信套接字与客户端进行数据收发char rbuf[128]="";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//从套接字中读取数据int res=recv(newfd,rbuf,sizeof(rbuf),0);if(res==0){printf("客户端已经下线\n");break;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);//将收到的消息加上其他字符回过去strcat(rbuf,"*_*");send(newfd,rbuf,sizeof(rbuf),0);}//6.关闭套接字close(newfd);close(sfd);return 0;
}

tcpCli.c

#include<myhead.h>
#define SER_IP "192.168.159.143"  //服务器IP
#define SER_PORT 5678    //服务器端口
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd=-1;cfd=socket(AF_INET,SOCK_STREAM,0);//参数1:表示使用的是IPv4的通信协议//参数2:表示使用tcp通信类型//参数3:表示前面已经特定了通信协议if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.绑定(非必须)//3.连接服务器//3.1填充要连接的服务器地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;   //地址族sin.sin_port=htons(SER_PORT);    //端口号sin.sin_addr.s_addr=inet_addr(SER_IP);   //IP地址//3.2.连接服务器if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("connect error");return -1;}printf("connect success\n");//4.数据收发char wbuf[128]="";while(1){//清空数据bzero(wbuf,sizeof(wbuf));printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);   //从终端输入//将数据发送给服务器send(cfd,wbuf,sizeof(wbuf),0);printf("发送成功\n");//判断发送的数据if(strcmp(wbuf,"quit")==0)break;//接收服务器发来的消息//清空数据bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到消息为:%s\n",wbuf);}//6.关闭套接字close(cfd);return 0;
}

3.UDP通信模型

udpSer.c

#include<myhead.h>#define SER_IP "192.168.159.143"    //服务器IP
#define SER_PORT 5566int main(int argc, const char *argv[])
{//1.创建用于通信的套接字int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd==-1){perror("socket error");return -1;}printf("sfd=%d\n",sfd);//2.绑定IP地址和端口号//2.1填充地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;   //地址族sin.sin_port=htons(SER_PORT);   //端口号sin.sin_addr.s_addr=inet_addr(SER_IP);   //IP地址//2.绑定if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1){perror("bind error");return -1;}printf("bind success\n");//3.收发数据char rbuf[128]="";//定义容器接收对端地址信息结构体struct sockaddr_in cin;socklen_t socklen=sizeof(cin);while(1){//清空数组bzero(rbuf,sizeof(rbuf));//接收数据recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&socklen);printf("收到消息为:%s\n",rbuf);//将消息加个笑脸回过去strcat(rbuf,"*_*");if(sendto(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,socklen)==-1){perror("sendto error");return -1;}}//4.关闭套接字close(sfd);return 0;
}

udpCli.c

#include<myhead.h>
#define SER_IP "192.168.159.143"      //服务器IP
#define SER_PORT 5566    //服务器端口号int main(int argc, const char *argv[])
{//1.创建用于通信的套接字int cfd=socket(AF_INET,SOCK_DGRAM,0);if(cfd==-1){perror("socket error");return -1;}printf("cfd=%d\n",cfd);//2.绑定IP地址和端口号(非必须)//3.收发数据char wbuf[128]="";//定义容器,记录服务器的地址信息结构体struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);while(1){//清空数组bzero(wbuf,sizeof(wbuf));//从终端获取数据printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]='\0';//将数据发送给服务器sendto(cfd,wbuf,sizeof(wbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");//接收服务器回复的消息bzero(wbuf,sizeof(wbuf));recvfrom(cfd,wbuf,sizeof(wbuf),0,NULL,NULL);printf("收到消息\n");}//4.关闭套接字close(cfd);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/499433.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为自动驾驶技术详解报告分享

ADS2.0首发搭载问界M5智驾版&#xff0c;城市NCA计划年底全国开通。2023年4月16日华为在智能汽车解决方案发布会上发布了最新的ADS2.0产品&#xff0c;硬件数量减少至27个(11个摄像头12个超声波雷达3个毫米波雷达1个激光雷达,ADS1.0有34个)&#xff0c;车载计算平台改为MDC610&…

二叉树——二叉树所有路径

二叉树所有路径 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","1-…

深入理解Java中的优先级队列(堆)——PriorityQueue

引言&#xff1a; 在Java中&#xff0c;优先级队列&#xff08;PriorityQueue&#xff09;是一种基于堆结构实现的队列&#xff0c;其中每个元素都有一个优先级&#xff0c;优先级高的元素在队列中具有更高的优先级&#xff0c;排在前面。优先级队列常用于任务调度、事件处理等…

9.函数,变量作用域(全局作用域和局部作用域),匿名函数,立即执行函数,逻辑中断,常见值布尔判断

函数 其实学习函数学习的不仅仅是在js中如何声明一个函数如何给函数传参如何引用和调用函数&#xff0c;函数在整个编程领域都是一种思想—抽取和封装的思想 那么啥是抽取和封装的思想呢&#xff1f;-------------------------------------------- 抽取 抽取就是比如拿厨房…

【MATLAB源码-第149期】基于MATLAB的2ASK,2FSK,2PSK,2DPSK等相干解调仿真,输出各节点波形。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 2ASK&#xff08;二进制幅移键控&#xff09;、2FSK&#xff08;二进制频移键控&#xff09;、2PSK&#xff08;二进制相移键控&#xff09;和2DPSK&#xff08;二进制差分相移键控&#xff09;是数字调制技术中的基本调制方…

1 数据分析概述与职业操守

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 指标体系——目标&#xff08;O&#xff09;、策略&#xff08;S&#xff09;、指标&a…

网工内推 | 项目经理,软考证书优先,最高26K,加班补贴

01 龙盈智达 招聘岗位&#xff1a;项目经理 职责描述&#xff1a; 1 根据业务员需求&#xff0c;完成生态圈下账簿中心系统的开发管理工作。 2 负责账簿中心实施过程中的需求调研分析、方案设计、开发测试、系统上线等工作的计划、组织协调、沟通等方面管理工作。 3 完成系统核…

将python程序打包为exe格式

1. 安装pyinstaller winr打开命令窗口 输入&#xff1a; pip install pyinstaller输入命令后会自动安装pyinstaller 2. 打包 进入你的代码所在位置&#xff0c;输入cmd 在弹出的窗口中输入 pyinstaller --onefile your_script.pyyour_script.py修改为你需要打包的程序名字 …

select * from 表 c=‘1‘ and b=‘2‘ and a=‘3‘; abc是联合索引,这样查询会命中索引吗?

倒叙也会命中索引 但是要注意&#xff0c;倒叙的时候必须要有a存在&#xff0c;否则就会索引失效 因为mysql底层会有优化器去进行优化&#xff0c;但是如果没有a的话&#xff0c;那么优化器就不知道要优化那个索引了&#xff0c;所以他走了全表&#xff0c;导致索引失效

Unity(第九部)物体类

拿到物体的某些数据 using System.Collections; using System.Collections.Generic; using UnityEngine;public class game : MonoBehaviour {// Start is called before the first frame updatevoid Start(){//拿到当前脚本所挂载的游戏物体//GameObject go this.gameObject;…

基于systick实现获取系统运行时间

基于systick实现获取系统运行时间 文章目录 基于systick实现获取系统运行时间systick.c代码结构:代码功能:总结 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

GIT 拉取代码报错error:some local refs could not be updated

文章目录 报错信息处理办法在这里插入图片描述小结 报错信息 ![new branch] dev->orgin/dev(unable to update local ref) error:some local refs could not be updated;try running git remote prune orginto remove any old,confilicting branches 处理办法 git gc --pru…