2024.3.4

思维导图

作业1:广播

发送端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//创建套接字int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd == -1){perror("sockeet error");return -1;}//设置当前套接字允许广播属性int broadcast = 1;if(setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast)) == -1){perror("setsockopt error");return -1;}//绑定(可选)//填充接收端地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.s_addr = inet_addr("192.168.244.255");//发送数据char sbuf[128] = "";while(1){printf("请输入>>");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1] = 0;sendto(sfd,sbuf,strlen(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");}//关闭close(sfd);return 0;
}

接收端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//创建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}printf("rfd = %d\n",rfd);//填充地址信息结构体struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(8888);rin.sin_addr.s_addr = inet_addr("192.168.244.255");//绑定if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//接收广播消息char rbuf[128] ="";while(1){//清空消息bzero(rbuf,sizeof(rbuf));//读取消息recv(rfd,rbuf,sizeof(rbuf),0);printf("收到消息:%s\n",rbuf);}//关闭套接字close(rfd);return 0;
}

作业2:组播

发送端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//创建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}//绑定端口号和ip地址//填充地址信息结构体struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(9999);rin.sin_addr.s_addr = inet_addr("192.168.244.140");//绑定端口号和IPif(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//发送消息//填充接收端地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(8888);sin.sin_addr.s_addr = inet_addr("224.1.2.3");char sbuf[128] = "";while(1){printf("请输入>>");fgets(sbuf,sizeof(sbuf),stdin);sbuf[strlen(sbuf)-1] = 0;//向组播地址中发送信息sendto(rfd,sbuf,strlen(sbuf),0,(struct sockaddr*)&sin,sizeof(sin));printf("发送成功\n");}return 0;
}

接收端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//创建套接字int rfd = socket(AF_INET,SOCK_DGRAM,0);if(rfd == -1){perror("socket error");return -1;}printf("rfd = %d\n",rfd);//设置加入多播组struct ip_mreqn imr;imr.imr_multiaddr.s_addr = inet_addr("224.1.2.3");   //组播ipimr.imr_address.s_addr = inet_addr("192.168.244.140");   //本地ipimr.imr_ifindex = 2;        //网卡编号if(setsockopt(rfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&imr,sizeof(imr)) == -1){perror("setsockopt error");return -1;}//填充地址信息结构体struct sockaddr_in rin;rin.sin_family = AF_INET;rin.sin_port = htons(8888);rin.sin_addr.s_addr = inet_addr("224.1.2.3");//绑定if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin)) == -1){perror("bind error");return -1;}//接收组播消息char rbuf[128] ="";while(1){//清空消息bzero(rbuf,sizeof(rbuf));//读取消息recv(rfd,rbuf,sizeof(rbuf),0);printf("收到消息:%s\n",rbuf);}//关闭套接字close(rfd);return 0;
}

作业3:流式域套接字

TCP服务器端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//创建套接字int sfd = socket(AF_UNIX,SOCK_STREAM,0);if(sfd == -1){perror("socket error");return -1;}//判断套接字文件是否存在,如果存在需要删除if(access("./mysocket",F_OK) == 0);{//说明存在,将该文件删除if(unlink("./mysocket") == -1){perror("unlink error");return -1;}}//绑定套接字文件//填充地址信息结构体struct sockaddr_un sun;sun.sun_family = AF_UNIX;               //地址族strcpy(sun.sun_path , "./mysocket");    //套接字文件//绑定 if(bind(sfd , (struct sockaddr*)&sun , sizeof(sun)) == -1){perror("bind error");return -1;}printf("bind success\n");//监听if(listen(sfd,128) == -1){perror("listen error");return -1;}printf("listen success\n");//阻塞等待客户端连接请求//定义容器接收客户端地址信息struct sockaddr_un cun;socklen_t socklen = sizeof(cun);int newfd = -1;if((newfd = accept(sfd,(struct sockaddr*)&cun,&socklen))==-1){perror("accept error");return -1;}printf("有新客户发来链接请求\n");//数据收发char rbuf[128]="";while(1){//清空bzero(rbuf,sizeof(rbuf));//收取数据recv(newfd,rbuf,sizeof(rbuf),0);printf("[%s]:%s\n",cun.sun_path,rbuf);//链接一个笑脸回复strcat(rbuf,"*_*");//发送回去send(newfd,rbuf,strlen(rbuf),0);printf("发送成功\n");}//关闭套接字close(sfd);close(newfd);return 0;
}

客户端:

#include<myhead.h>
int main(int argc, const char *argv[])
{//1.创建用于通信的套接字文件描述符int cfd = socket(AF_UNIX,SOCK_STREAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//判断套接字文件是否存在,如果存在则需要删除if(access("./mysocket1",F_OK) == 0){//说明存在,将该文件删除if(unlink ("./mysocket1") == -1){perror("unlink error");return -1;}}//2.绑定(非必须)//填充地址信息结构体struct sockaddr_un cun;cun.sun_family = AF_UNIX;strcpy(cun.sun_path,"./mysocket1");//绑定if(bind(cfd,(struct sockaddr*)&cun , sizeof(cun)) == -1){perror("bind error");return -1;}//3.连接服务器//3.1填充要连接的服务器地址信息结构体struct sockaddr_un sun;sun.sun_family = AF_UNIX;               //地址族strcpy(sun.sun_path,"./mysocket");      //套接字文件//3.2连接服务器if(connect(cfd ,(struct sockaddr*)&sun,sizeof(sun)) == -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);     //从终端输入wbuf[strlen(wbuf)-1] = 0;//将数据发送给服务器send(cfd , wbuf , strlen(wbuf) , 0);printf("发送成功\n");//判断发送的数据if(strcmp(wbuf,"quit") == 0){break;}//接受服务器发来的信息//清空数据bzero(wbuf,sizeof(wbuf));recv(cfd , wbuf , sizeof(wbuf), 0);printf("收到信息为:%s\n",wbuf);}//5.关闭套接字close(cfd);return 0;
}

作业4:报式域套接字

服务器端:

#include<myhead.h>int main(int argc, const char *argv[])
{//创建用于通信的套接字int sfd = socket(AF_UNIX,SOCK_DGRAM,0);if(sfd == -1){perror("socket error");return -1;}printf("sfd = %d\n",sfd);//判断套接字文件是否存在,如果存在则需要删除if(access("./linux1",F_OK) == 0){//说明文件存在,将该文件删除if(unlink("./linux1") == -1){perror("unlink error");return -1;}}//绑定IP地址和端口号//填充地址信息结构体struct sockaddr_un sun;sun.sun_family = AF_UNIX;          //地址族strcpy(sun.sun_path,"./linux1");//绑定if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun)) == -1){perror("bind error");return -1;}printf("bind success\n");//收发数据char rbuf[128] = "";//定义容器接受对端地址信息结构体struct sockaddr_un cun;socklen_t socklen = sizeof(cun);while(1){//清空数组bzero(rbuf , sizeof(rbuf));//接收数据recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cun,&socklen);printf("收到信息为:%s\n",rbuf);//将消息加“*_*”返回strcat(rbuf,"*_*");if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cun,socklen) == -1){perror("sendto error");return -1;}}//关闭套接字close(sfd);return 0;
}

客户端:
 

#include<myhead.h>int main(int argc, const char *argv[])
{//创建用于通信的套接字int cfd = socket(AF_UNIX,SOCK_DGRAM,0);if(cfd == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);//判断套接字文件是否存在,如果存在需要删除if(access("./linux2",F_OK) == 0){//说明存在,将该文件删除if(unlink("./linux2") == -1){perror("unlink error");return -1;}}//绑定IP地址和端口号(非必要)struct sockaddr_un cun;cun.sun_family = AF_UNIX;strcpy(cun.sun_path,"./linux2");if(bind(cfd,(struct sockaddr*)&cun,sizeof(cun)) == -1){perror("bind error");return -1;}//收发数据char wbuf[128] = "";//定义容器,记录服务器地址信息结构体struct sockaddr_un sun;sun.sun_family = AF_UNIX;strcpy(sun.sun_path,"./linux1");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*)&sun,sizeof(sun));printf("发送成功\n");//接收服务器回复的消息bzero(wbuf , sizeof(wbuf));}//关闭套接字close(cfd);return 0;
}

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

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

相关文章

nvm安装和使用保姆级教程(详细)

一、 nvm是什么 &#xff1a; nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和npm都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 二、卸载之前安装的node: …

pytorch(五)逻辑斯蒂回归

文章目录 模型损失函数代码和结果 逻辑斯蒂回归解决的事分类问题&#xff0c;分类输出的是类别的概率 模型 在线性模型中&#xff0c;通过 y w x b ywxb ywxb输出的是一个实数值&#xff0c;但是在分类问题中&#xff0c;输出的是类别的概率&#xff0c;所以需要一个函数&am…

社交媒体的未来图景:探索Facebook的数字化之旅

社交媒体已经成为现代社会不可或缺的一部分&#xff0c;其影响力已经深入到人们生活的方方面面。而在众多社交媒体平台中&#xff0c;Facebook无疑是其中的巨头&#xff0c;其数字化之旅更是引领着整个社交媒体行业的发展方向。本文将深入探讨社交媒体的未来图景&#xff0c;以…

稳定性建设

开篇 SLA&#xff08;service-level agreement&#xff0c;即 服务级别协议&#xff09;也称服务等级协议&#xff0c;经常被用来衡量服务稳定性指标。业界高可用的标准是按照系统宕机时间来衡量的&#xff0c;通常被称作“几个 9”&#xff0c;9 越多代表服务全年可用时间越长…

Linux运维工具-ywtool默认功能介绍

提示:工具下载链接在文章最后 目录 一.资源检查二.日志刷新三.工具升级四.linux运维工具ywtool介绍五.ywtool工具下载链接 一.资源检查 只要系统安装了ywtool工具,默认就会配置上"资源检查"的脚本资源检查脚本的执行时间:每天凌晨3点进行检查资源检查脚本的检查内容…

如何使用公网地址远程访问内网Nacos UI界面查看注册服务

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化…

Oracle 如何将txt文件中的数据导入数据库

使用文本导入器&#xff0c;可以将ASCII文件导入数据库。支持大多数面向行的格式&#xff0c;如逗号和制表符分隔的字段。导入程序将尝试自动确定文件格式&#xff0c;因此大多数时候您不会抰 需要定义任何内容&#xff0c;只需选择文件&#xff0c;选择一个表&#xff0c;然后…

三级分销数据库设计

一&#xff0c;数据结构 二&#xff0c;查询方法 1.mysql递归查询 获取id9的所有上级 r : 9 设置自己所要搜索子节点的id SELECTT2.* FROM(SELECTr AS _id,( SELECT r : pid FROM sj_user WHERE id _id ) AS 2v2,l : l 1 AS lvl FROM( SELECT r : 9 ) vars, -- 查询id为…

C语言 BMP图片的旋转与缩放

目录 一、bmp文件头、文件信息头、位图实际数据的数据结构定义 二、源BMP文件信息的读取 三、实际位图数据的旋转、缩放操作 四、生成转换过后的新位图文件 #include <stdlib.h> #ifndef PHOTODEAL_H #define PHOTODEAL_H #pragma pack(1) typedef struct tagBm…

基于React低代码平台开发:构建高效、灵活的应用新范式

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

Qt 实现橡皮擦拭显示图片

1.简介 在一些游戏中看见类似解密破案的效果&#xff0c;使用手触摸去擦拭图片上的灰尘&#xff0c;然后显示最终的图片&#xff0c;所以也想试试Qt实现的效果。大家有自己想做的效果&#xff0c;都可以尝试。 以下是效果展示图。 可以控制橡皮擦的大小&#xff0c;进行擦拭…

资深测试总结,接口自动化测试常用配置文件(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、常用的配置文件…