3.4作业

课上代码复习:

广播接收端代码:

#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;
}

广播发送端代码:

#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 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;
}

组播发送端代码:

#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;
}

流式域套接字

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;
}

TCP客户端实现:

#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;
}

UDP服务器端实现:

#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;
}

UDP客户端实现:

#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.mzph.cn/news/719376.shtml

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

相关文章

台式电脑电源各线的电压和电流输出和输出电流

台式电脑电源是电脑硬件的重要组成部分。 它为计算机的各个部件提供所需的电压和电流。 不同的硬件设备和组件有不同的电压和电流输出。 下面详细介绍台式电脑电源各线的电压&#xff0c;包括3.3V、5V、12V、-12V、-5V和5VSB&#xff0c;以及它们的输出电流和用途。 3.3V&#…

【AI+CAD】(一)ezdxf 解析DXF文件

DXF文件格式理解 DXF文件格式是矢量图形文件格式&#xff0c;其详细说明了如何表示不同的图形元素。 DXF是一个矢量图形文件&#xff0c;它捕获CAD图形的所有元素&#xff0c;例如文本&#xff0c;线条和形状。更重要的是&#xff0c;DXF是用于在CAD应用程序之间传输数据的图形…

STM32自学☞I2C

这里只是大体介绍&#xff0c;具体的可参考STM32数据手册

数据结构与算法-选择排序

引言 在计算机科学中&#xff0c;数据结构和算法是两个至关重要的基石。它们共同决定了程序的效率、可读性和可维护性。本文我们将聚焦于一种基础而直观的排序算法——选择排序&#xff0c;并探讨其内在的工作机制以及在实际应用中的优缺点。 一、什么是选择排序&#xff1f; …

xss.haozi.me:0x07

<img src1 onerroralert(1)

tomcat下载安装配置教程

tomcat下载安装配置教程 我是使用tomcat下载安装及配置教程_tomcat安装-CSDN博客 此贴来进行安装配置&#xff0c;原文21年已经有些许不同。 下载tomcat 官网&#xff1a;http://tomcat.apache.org/ 我们老师让安装8.5以上&#xff0c;所以我直接选择版本9 点击9页面之后…

HTTPS的实现原理

图片来源&#xff1a;HTTPS 详解一&#xff1a;附带最精美详尽的 HTTPS 原理图 - 个人文章 - SegmentFault 思否 加密流程按图中的序号分为&#xff1a; 客户端请求 HTTPS 网址&#xff0c;然后连接到 server 的 443 端口 (HTTPS 默认端口&#xff0c;类似于 HTTP 的80端口)。…

Windows批处理:bat文件学习

目录 第一章、快速了解Windows批处理1.1&#xff09;Windows批处理相关概念介绍1.1.1&#xff09;批处理的起源1.1.2&#xff09;bat文件介绍 1.2&#xff09;Demo1.2.1&#xff09;创建文件添加命令1.2.2&#xff09;bat脚本中的命令解释 第二章、实例2.1&#xff09;点击bat文…

navicat安装11.3

一、安装navicat 1、下载navicat 2、解压压缩包 3、点击exe文件 4、输入密钥&#xff1a; NAVH-WK6A-DMVK-DKW3 5、点击打开&#xff1a; 输入连接参数&#xff1a; 6、查看连接好仓库 7、 在使用navicat来编写sql语句 8、编写语句 连接不上问题&#xff0c;检查问题&#…

【Vue3】深入理解Vue中的ref属性

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Redis 之三:Redis 的发布订阅(pub/sub)

概念介绍 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff0c;它允许客户端之间进行异步的消息传递 Redis 客户端可以订阅任意数量的频道。 模型中的角色 在该模型中&#xff0c;有三种角色&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;负责发送信…

嵌入式中7个底层数据结构分解

在编程的世界里&#xff0c;数据结构是构建信息框架的骨架。就像现实生活中的建筑需要精心设计的结构一样&#xff0c;我们的数据也需要合适的结构来保证程序的高效和稳定。今天&#xff0c;我们就像探险家一样&#xff0c;一起去探索七大数据结构的奥秘&#xff0c;并揭开它们…

光路科技:工业以太网交换机引领工业互联网新篇章

随着全球范围内工业4.0的浪潮不断涌动&#xff0c;工业互联网作为其核心驱动力&#xff0c;正引领着工业生产向智能化、网络化的崭新阶段迈进。在这一转型的浪潮中&#xff0c;光路科技凭借其卓越的工业互联设备与创新解决方案&#xff0c;正为工业互联网领域的发展注入新的活力…

Linux环境基础开发工具使用

目录 1.Linux软件包管理器yum 什么是软件包 关于 lrzsz 查看软件包 2.Linux开发工具 2.1.vim的基本概念 2.2vim的基本操作 2.3vim命令模式命令集 1.插入模式 2.从插入模式切换为命令模式 3.移动光标 4.删除文字 5.复制 6.替换 7.撤销上一次的操作 8.更改 2.4v…

[动态规划]---part1

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

Linux设备模型(九) - bus/device/device_driver/class

一&#xff0c;设备驱动模型 1&#xff0c;概述 在前面写的驱动中&#xff0c;我们发现编写驱动有个固定的模式只有往里面套代码就可以了&#xff0c;它们之间的大致流程可以总结如下&#xff1a; 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号 register_chrdev_r…

Spring源码:手写SpringDI

我们是在实现了SpringIOC的基础上&#xff0c;进行拓展&#xff0c;IOC实现源码可以查看&#xff1a;手写SpringIOC 文章目录 一、分析二、实现1、构造注入1&#xff09;分析2&#xff09;版本1BeanReferenceBeanDefinitionGenericBeanDefinitionDefaultBeanFactory1、改造构造…

ES入门六:Suggesters Api实践

都是负担在很多app上&#xff0c;当我们输入某些内容时候&#xff0c;它会立即做一些补全操作&#xff0c;如果我想实现上述的需求&#xff0c;我们就可以使用ES提供的Suggesters Api。那Suggesters是如何做到的那&#xff1f;简单来说&#xff0c;Suggesters会将输入的文本拆分…

【网站项目】167固定资产管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

谁才是“内卷”之王?众多洗地机品牌哪家清洁力最强?清洁最干净?

在如今快节奏的生活中&#xff0c;家庭清洁工作愈发显得繁琐而耗时。添可洗地机凭借其高效的一体化清洁功能和智能化操作&#xff0c;为现代家庭生活带来了极大的便利。面对众多款品牌洗地机型号&#xff0c;消费者不禁会问&#xff1a;哪家洗地机清洁力最强&#xff1f;在性能…