2024-03-18 作业

news/2024/10/29 7:16:26/

作业要求:

1> 将广播发送端和接收端各实现一遍

2> 将组播发送端和接收端各实现一遍

3> 将流式域套接字的服务器端和客户端各实现一遍

1:将广播发送端和接收端各实现一遍

运行代码:
服务端:
客户端:
运行截图:

2:将组播发送端和接收端各实现一遍

运行代码:

服务端:
客户端:

运行截图:

3:将流式域套接字的服务器端和客户端各实现一遍

运行代码:

服务端:
#include<myhead.h>
int main(int argc, const char *argv[])
{//1.创建套接字文件int cfd = socket(AF_UNIX,SOCK_STREAM,0);if(-1==cfd){perror("socket error");return -1;}printf("%d success:cfd = %d\n",__LINE__,cfd);//判断文件是否存在if(access("./linux",F_OK)==0){if(unlink("./linux")==-1){perror("unlink");return -1; }}//绑定自己struct sockaddr_un cun;cun.sun_family = AF_UNIX;strcpy(cun.sun_path,"./linux");if(bind(cfd,(struct sockaddr *)&cun,sizeof(cun))==-1){perror("bind");return -1;}printf("%d success:bind\n",__LINE__);//请求连接struct sockaddr_un sun;sun.sun_family = AF_UNIX;strcpy(sun.sun_path,"./unix");if(connect(cfd,(struct sockaddr *)&sun,sizeof(sun))==-1){perror("connect");return -1;}printf("%d success:connect\n",__LINE__);//信息交互char wbuf[128]="";while(1){printf("请输入>>>");fgets(wbuf,sizeof(wbuf)-1,stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,strlen(wbuf),0);bzero(wbuf,sizeof(wbuf));recv(cfd,wbuf,sizeof(wbuf),0);printf("收到信息>>>%s\n",wbuf);}//关闭文件close(cfd);return 0;
}
客户端:
#include<myhead.h>
int main(int argc, const char *argv[])
{//1.创建套接字文件int sfd = socket(AF_UNIX,SOCK_STREAM,0);if(-1==sfd){perror("socket error");return -1;}printf("%d success:sfd = %d\n",__LINE__,sfd);//2.判断文件是否存在if(access("./unix",F_OK)==0){if(unlink("./unix")==-1){perror("unlink error");return -1;}}printf("%d success\n",__LINE__);//3.绑定struct sockaddr_un sun;sun.sun_family = AF_UNIX;strcpy(sun.sun_path,"./unix");if(-1==bind(sfd,(struct sockaddr *)&sun,sizeof(sun))){perror("bind error");return -1;}printf("%d success:bind\n",__LINE__);//4.开启监听模式if(-1==listen(sfd,128)){perror("listen error");return -1;}printf("%d success:listen\n",__LINE__);//5.接受连接int newfd;struct sockaddr_un cun;socklen_t socklen = sizeof(cun);if(-1 == (newfd = accept(sfd,(struct sockaddr *)&cun,&socklen))){perror("accept error");return -1;}printf("%d success:accept\n",__LINE__);printf("[%s] 发来连接请求\n",cun.sun_path);//6.信息交互char rbuf[128] = "";while(1){bzero(rbuf,sizeof(rbuf));int res = recv(newfd,rbuf,sizeof(rbuf)-1,0);if(res<=0){printf("客户端已下线\n");return -1;}printf("%d [%s]>>>%s\n",__LINE__,cun.sun_path,rbuf);strcat(rbuf," *<*");send(newfd,rbuf,strlen(rbuf),0); //printf("发送成功\n");}//7.关闭close(sfd);close(newfd);return 0;
}

运行截图:

 


http://www.ppmy.cn/news/1387475.html

相关文章

vue-router(v4.0) 基础1

说明 Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。功能包括&#xff1a; 嵌套路由映射 动态路由选择 模块化、基于组件的路由配置 路由参数、查询、通配符 展示由 Vue.js 的过渡系统提供的过渡效果 细致…

python 通过 ast 替换代码

导航目录 目录结构要替换的代码替换代码的逻辑新建类&#xff0c;继承 ast运行新建的类最最重要的一步replace_code.py 完整代码 main.py 里面的代码执行结果 最后 目录结构 . ├── hello │ ├── __init__.py │ └── utils.py ├── main.py ├── replace_code…

“灯塔”——一个让人爱不释手的前端监测工具

引言 "灯塔"&#xff08;fee&#xff09;作为一个前端监控系统&#xff0c;通常具备捕获浏览器端错误、性能监控、用户行为跟踪等功能。它的主要目的是帮助开发者了解他们的网站或应用在用户端的表现&#xff0c;以及时发现并解决问题。下面是关于这种系统的一些关键…

红与黑(c++题解)

题目描述 有一间长方形的房子&#xff0c;地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上&#xff0c;只能向相邻的黑色瓷砖移动。请写一个程序&#xff0c;计算你总共能够到达多少块黑色的瓷砖。 输入格式 包括多个数据集合。每个数据集合的第一行是…

JDBC连接数据库小白级教程

虽然MyBatis等ORM&#xff08;Object-Relational Mapping&#xff09;框架在Java开发中变得非常流行&#xff0c;并且简化了数据库操作的复杂性&#xff0c;但学习JDBC仍然具有一定的重要性&#xff1a; 基础理解&#xff1a;学习JDBC可以帮助你深入理解数据库连接和操作的底层…

并发编程3大基本特性(有序性、可见性、原子性)

并发编程3大基本特性 一、并发编程的基本特性有3点&#xff08;这3点需人为来保障&#xff09;二、思考有序性&#xff08;算力层优化导致的无序&#xff09;可见性&#xff08;存储层优化导致的不可见&#xff09;原子性&#xff08;复合操作导致的不原子&#xff09; 三、并发…

springboot 动漫周边商城的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

4-激活函数:给机器注入灵魂

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;背景 &#xff08;二&#xff09;激活函数 &#xff08…