2024.3.4

news2024/11/15 8:24:47

思维导图

作业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");
 
 
	//绑定端口号和IP
	if(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");   //组播ip
	imr.imr_address.s_addr = inet_addr("192.168.244.140");   //本地ip
	imr.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.coloradmin.cn/o/1489929.html

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

相关文章

idea中引入新JDK环境

在不同的项目中往往会需要不同的运行环境&#xff0c;那么如何下载一个新的环境并运用到idea中呢&#xff1f; 下面给出的就是oracle官网&#xff0c;以JDK17为例教大家如何下载 Java Archive Downloads - GraalVM for JDK 17https://www.oracle.com/java/technologies/javase…

End-to-End Weakly-Supervised SemanticSegmentation with Transformers

摘要 弱监督语义分割&#xff08;WSSS&#xff09;使用图像级标签是一项重要且具有挑战性的任务。由于高训练效率&#xff0c;端到端的WSSS解决方案受到社区越来越多的关注。然而&#xff0c;当前的方法主要基于卷积神经网络&#xff0c;并未正确地探索全局信息&#xff0c;因…

在Visual Studio配置C++的netCDF库的方法

本文介绍在Windows电脑的Visual Studio软件中&#xff0c;配置C 语言最新版netCDF库的方法。 netCDF&#xff08;Network Common Data Form&#xff09;是一种用于存储、访问和共享科学数据的文件格式和库&#xff0c;其提供了一种灵活的方式来组织、描述和存储多维数据&#x…

【系统架构设计师考试大纲】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱考试目标考试要求考试题目题型分析计算机基础知识&#xff08;20%&#xff09;信息化战略与规划&#xff08;9%&#xff09;软件工程&#xff08;25%&#xff09;系统架构设计&#xff08;35%&#xff09;信…

适用于 Windows 的7大数据恢复软件解决方案

数据丢失是数字世界中令人不快的一部分&#xff0c;它会在某一时刻影响许多计算机用户。很容易意外删除一些重要文件&#xff0c;这可能会在您努力恢复它们时带来不必要的压力。幸运的是&#xff0c;数据恢复软件可以帮助恢复已删除的文件&#xff0c;即使您没有备份它们。以下…

AI大模型与小模型之间的“脱胎”与“反哺”(第三篇)

51. **异构图神经网络集成&#xff08;Heterogeneous Graph Neural Network Integration&#xff09;**&#xff1a; 构建异构图神经网络来捕获和整合各行业间复杂的实体关系及属性信息。每个行业的小模型可视为一个子图&#xff0c;将它们整合进一个统一的大图模型中&#xff…

力扣206反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1&#xff0c;双指针 2&#xff0c;递归。递归参考双指针更容易写&#xff0c; 为什么不用头插…

学习JAVA的第十三天(基础)

目录 API之Arrays 将数组变成字符串 二分查找法查找元素 拷贝数组 填充数组 排序数组 Lambda表达式 集合的进阶 单列集合 体系结构 Collection API之Arrays 操作数组的工具类 将数组变成字符串 //将数组变成字符串char[] arr {a,b,c,d,e};System.out.println(Arra…

Linux-信号3_sigaction、volatile与SIGCHLD

文章目录 前言一、sigaction__sighandler_t sa_handler;__sigset_t sa_mask; 二、volatile关键字三、SIGCHLD方法一方法二 前言 本章内容主要对之前的内容做一些补充。 一、sigaction #include <signal.h> int sigaction(int signum, const struct sigaction *act,struc…

计数排序详解(附源码)

目录 思想&#xff1a; 源码&#xff1a; 思想&#xff1a; 计数排序&#xff1a;用一个数组记录按原始数据中&#xff0c;每个数据出现的次数 非常牛批的思路&#xff0c;没有用到比较 直接对每个数据进行计数 然后从计数的数组中&#xff0c;往回覆盖数据 从左到右&#xf…

解决Qtcreator搜狗输入法无法输入中文问题

由于搜狗输入法依赖fcitx&#xff0c;所以我们解决该问题的核心操作是为QtCreator提供支持fcitx 本系统环境说明&#xff1a;ubuntu22.04、Qt5.12.8、Qt6.6.1&#xff08;我安装了Qt5、Qt6&#xff09; 一、尝试拷贝系统自带libfcitxplatforminputcontextplugin.so到Qt安装目…

科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?

科技云报道原创。 就在大家还在回味2月29日阿里云发布“史上最大降价”的惊喜时&#xff0c;京东云连夜发布降价消息&#xff0c;成为第一家跟进的云服务商&#xff0c;其“随便降&#xff0c;比到底&#xff01;”的口号&#xff0c;颇有对垒的意味&#xff0c;直接吹响了云计…

抖音视频评论批量采集软件|视频下载工具

《轻松搞定&#xff01;视频评论批量采集软件&#xff0c;助您高效工作》 在短视频这个充满活力和创意的平台上&#xff0c;了解用户评论是了解市场和观众心声的重要途径之一。为了帮助您快速获取大量视频评论数据&#xff0c;我们推出了一款操作便捷、功能强大的软件&#xff…

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和(C语言)

例如&#xff0c;调用DigitSum(1729)&#xff0c;则应该返回1729&#xff0c;它的和是19 输入&#xff1a;1729&#xff0c;输出&#xff1a;19 int Func(int n) {if (n < 9){return n;}return n % 10 Func(n / 10); } int main() {printf("%d ", Func(12345));r…

链路负载均衡之DNS透明代理

一、DNS透明代理 一般来说&#xff0c;企业的客户端上都只能配置一个运营商的DNS服务器地址&#xff0c;DNS服务器通常会将域名解析成自己所在ISP内的Web服务器地址&#xff0c;这将导致内网用户的上网流量都集中在一个ISP的链路上转发&#xff0c;最终可能会造成链路拥塞&…

Redis基础---Java客户端应用

目录 一、介绍 二、Jedis的使用 三、SpringDataRedis的使用 创建&#xff1a; 一、介绍 在Redis官网&#xff0c;提供了多种编程语言的客户端&#xff0c;如Java、C等&#xff0c;官网地址&#xff1a;Clients | Redis 而对于Java的客户端有很多&#xff0c;但是用的最多的就是…

42、网络编程/多点通信和域套接字通信模型20240304

一、多点通信之广播的收发端实现 1.广播发送端代码&#xff1a; #include<myhead.h>int main(int argc, const char *argv[]) {int sfdsocket(AF_INET,SOCK_DGRAM,0);//创建套接字if(sfd-1){perror("socket,error");return -1;}int broadcast1;//设置套接字广…

【AI视野·今日NLP 自然语言处理论文速览 第八十一期】Mon, 4 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 4 Mar 2024 Totally 48 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Mitigating Reversal Curse via Semantic-aware Permutation Training Authors Qingyan Guo, Rui Wang, Junlia…

J013_简易商家外卖系统

一、需求描述 1、完成菜品的上架功能 2、完成菜品的浏览功能 二、开发设计 1、需要设计一个菜品类&#xff0c;用于创建菜品对象 2、需要一个菜品操作类&#xff0c;用于封装菜品上架和菜品浏览功能 3、测试程序 三、代码实现 3.1 Food类 package com.itheima.arrayli…

Linux下安装MinDoc文档

文章目录 背景下载文件将M i n D o c放到目录内解压文件创建数据库配置数据库启动程序演示图 背景 由于日前自己的项目&#xff0c;需要分对外的公开文档&#xff0c; 但是又不想写页面&#xff0c;所以就在网上找了份文档项目。 具体使用步骤如下&#xff1a; 下载文件 请从…