网络编辑day4

思维导图

广播模型发送端-->类似于UDP客户端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1、创建套接字
	int sfd=socket(AF_INET,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("socket error ");
		return -1;
	}
	//2、将套接字设置成允许广播
	int broadcast=1;
	if(setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast))==-1)
	{
		perror("setsockopt error");
		return -1;
	}
	//3、绑定(非必须)
	//4、填充接收端地址信息结构体
	struct sockaddr_in cin;
	cin.sin_family=AF_INET;
	cin.sin_port=htons(6666);
	cin.sin_addr.s_addr=inet_addr("192.168.123.255");
	//5、发送消息
	char buf[128]="";
	while(1)
	{
		printf("请输入>>>");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1]=0;
		sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,sizeof(cin));
	}
	//6、关闭套接字
	close(sfd);
	return 0;
}

广播模型接受端-->类似于UDP服务器端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1、创建套接字
	int sfd=socket(AF_INET,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("socket error ");
		return -1;
	}
	//2、填充地址
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(6666);
	sin.sin_addr.s_addr=inet_addr("192.168.123.255");
	socklen_t socklen=sizeof(sin);
	//3、绑定
	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("bind error");
		return -1;
	}
	//4.接收信息
	char buf[128]="";
	while(1)
	{
		recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&socklen);
		printf("%s\n",buf);
	}
	//6、关闭套接字
	close(sfd);
	return 0;
}

组播发送端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1、创建套接字
	int sfd=socket(AF_INET,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("socket error");
		return -1;
	}
	//2、填充地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(9999);
	sin.sin_addr.s_addr = inet_addr("224.1.2.3");

	//3、发送消息
	char sbuf[128] = "";
	while(1)
	{
		printf("请输入>>>");
		fgets(sbuf, sizeof(sbuf), stdin);
		sbuf[strlen(sbuf)-1] = 0;

		//将消息发送出去
		sendto(sfd, sbuf, sizeof(sbuf), 0, (struct sockaddr*)&sin, sizeof(sin));
		printf("发送成功\n");
	}

	//4、关闭套接字
	close(sfd);
	return 0;	
}

组播接收端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1、创建套接字
	int sfd=socket(AF_INET,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("socket error");
		return -1;
	}
	//2、设置网络属性
	struct ip_mreqn im;
	im.imr_multiaddr.s_addr = inet_addr("224.1.2.3");    //组播地址
	im.imr_address.s_addr = inet_addr("192.168.122.88");  //本机ip
	im.imr_ifindex = 2;             //网络索引
	if(setsockopt(sfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &im, sizeof(im)) == -1)
	{
		perror("setsockopt error");
		return -1;
	}
	printf("加入多播组成功\n");
	//3、填充结构体
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(9999);
	sin.sin_addr.s_addr=inet_addr("224.1.2.3");
	//4、绑定
	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("bind error");
		return -1;
	}
	//5、接收消息
	char buf[128]="";
	while(1)
	{
		bzero(buf,sizeof(buf));
		recvfrom(sfd,buf,sizeof(buf),0,0,0);
		printf("收到:%s\n",buf);
	}
	close(sfd);
	return 0;
}

 流式域套接字 服务器端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1.创建套接字
	int sfd=socket(AF_UNIX,SOCK_STREAM,0);
	if(sfd==-1)
	{
		perror("sfd error");
		return -1;
	}
	//套接字文件只能绑定一个不存在的套接字文件
	//所以在绑定前需要判断当前文件是否存在
	if(access("./unix",F_OK)==0)
	{
		//表示文件存在,删除该文件
		if(unlink("./unix")==-1)
		{
			perror("unlink error");
			return -1;
		}
	}
	//2、填充地址信息结构体
	struct sockaddr_un sun;
	sun.sun_family=AF_UNIX;
	//sun.sun_path="./unix";//错误,字符串赋值不能使用复制运算符
	strcpy(sun.sun_path,"./unix");
	//3.绑定
	if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun))==-1)
	{
		perror("bind error");
		return -1;
	}
	//4、监听
	if(listen(sfd,128)==-1)
	{
		perror("listen error");
		return -1;
	}
	//5、阻塞接收客户端连接请求
	struct sockaddr_un cun;
	socklen_t socklen=sizeof(cun);
	int newfd=accept(sfd,(struct sockaddr*)&cun,&socklen);//表示不接收客户端地址信息
	if(newfd==-1)
	{
		perror("accept error");
		return -1;
	}
	//6、收发数据
	char buf[128]="";
	while(1)
	{ 
		bzero(buf,sizeof(buf));
		int res=recv(newfd,buf,sizeof(buf),0);
		if(res==0)
		{
			printf("客户端以下线\n");
			break;
		}
		printf("[%s]buf= %s\n",cun.sun_path,buf);
	}
	//7、关闭套接字
	close(newfd);
	close(sfd);




	return 0;
}

流式域套接字客户端

#include<head.h>
int main(int argc, const char *argv[])
{
	//1.创建套接字
	int sfd=socket(AF_UNIX,SOCK_STREAM,0);
	if(sfd==-1)
	{
		perror("sfd error");
		return -1;
	}
	//套接字文件只能绑定一个不存在的套接字文件
	//所以在绑定前需要判断当前文件是否存在
	if(access("./linix",F_OK)==0)
	{
		//表示文件存在,删除该文件
		if(unlink("./linix")==-1)
		{
			perror("unlink error");
			return -1;
		}
	}
	//2、填充地址信息结构体
	struct sockaddr_un cun;
	cun.sun_family=AF_UNIX;
	strcpy(cun.sun_path,"./linix");
	//3.绑定
	if(bind(sfd,(struct sockaddr*)&cun,sizeof(cun))==-1)
	{
		perror("bind error");
		return -1;
	}
	//4.链接
	struct sockaddr_un sun;
	sun.sun_family=AF_UNIX;
	strcpy(sun.sun_path,"./unix");
	if(connect(sfd,(struct sockaddr*)&sun,sizeof(sun))==-1)
	{
		perror("connect error");
		return -1;
	}
	//收发数据
	char buf[128]="";
	while(1)
	{
		bzero(buf,sizeof(buf));
		printf("请输入>>>");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1]=0;
		send(sfd,buf,sizeof(buf),0);

		printf("发送成功\n");
		if(strcmp(buf,"quit")==0)
		{
			break;
		}
	}
	//7、关闭套接字
	close(sfd);
	return 0;
}

报式域套接字服务器端

#include<head.h>
int main(int argc, const char *argv[])
{
	//创建套接字文件
	int sfd = socket(AF_UNIX,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("sfd error");
		return -1;
	}
	if(access("./unix",F_OK)==0)
	{
		if(unlink("./unix")==-1)
		{
			printf("unlink error");
			return -1;
		}
	}
	//绑定
	struct sockaddr_un sun;
	sun.sun_family=AF_UNIX;
	strcpy(sun.sun_path,"./unix");
	if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun))==-1)
	{
		perror("bind error");
		return -1;
	}
	//数据的收发
	char buf[128]="";
	struct sockaddr_un cun;
	socklen_t socklen=sizeof(cun);
	while(1)
	{
		bzero(buf,sizeof(buf));
		recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cun,&socklen);
		printf("读取的消息为:%s\n",buf);
		strcat(buf,"*_*");
		if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cun,socklen)==-1)
		{
			perror("write error");
			return -1;
		}
	}
	close(sfd);


	return 0;
}

报式域套接字客户端

#include<head.h>
int main(int argc, const char *argv[])
{
	//创建套接字文件
	int sfd = socket(AF_UNIX,SOCK_DGRAM,0);
	if(sfd==-1)
	{
		perror("sfd error");
		return -1;
	}
	if(access("./linix",F_OK)==0)
	{
		if(unlink("./linix")==-1)
		{
			printf("unlink error");
			return -1;
		}

	}
	//绑定
	struct sockaddr_un sun;
	sun.sun_family=AF_UNIX;
	strcpy(sun.sun_path,"./linix");
	if(bind(sfd,(struct sockaddr*)&sun,sizeof(sun))==-1)
	{
		perror("bind error");
		return -1;
	}
	//数据的收发	
	struct sockaddr_un cun;
	cun.sun_family=AF_UNIX;
	strcpy(cun.sun_path,"./unix");

	char buf[128]="";
	while(1)
	{
		printf("请输入>>>");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1]=0;
		sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cun,sizeof(cun));
		if(strcmp(buf,"quit")==0)
		{
			break;
		}
		recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL);
		printf("收到消息:%s\n",buf);
	}
	close(sfd);


	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud】微服务框架后端部署详细过程记录20240119

前言&#xff1a;前两天公司接到客户提供的一个微服务框架&#xff0c;导师让我在本地部署验证一下该框架的可用性&#xff0c;借此机会记录一下微服务项目的一个基本部署流程&#xff0c;仅供学习参考&#xff0c;如有不足还请指正&#xff01; 文件结构 提供的压缩文件共包含…

【lettuce-排行榜】

背景&#xff1a; 这次游戏中台采用lettuce的zset完成游戏内的本服和跨服排行榜&#xff0c;因此写一下案例。 pom.xml <dependency><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId><version>6.2.4.RELEASE</ve…

Android14之DefaultKeyedVector实现(一百八十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

python之粘包/粘包的解决方案

python之粘包/粘包的解决方案 什么是粘包 粘包就是在数据传输过程中有多个数据包被粘连在一起被发送或接受 服务端&#xff1a; import socket import struct# 创建Socket Socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定服务器和端口号 servers_addr (…

LeetCode 热题 100 | 双指针(上)

目录 1 283. 移动零 2 11. 盛最多水的容器 3 15. 三数之和 菜鸟做题第一周&#xff0c;语言是 C 1 283. 移动零 解题思路&#xff1a; 两个指针一前一后遍历数组前者永远指向 0&#xff0c;后者永远在寻找非 0 数的路上后者找到一个非 0 数就和前者进行一个数值交换 …

Python爬虫从入门到入狱系列合集

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

linux下USB抓包和分析流程

linux下USB抓包和分析流程 在windows下抓取usb包时可以通过wireshark安装时安装USBpcap来实现usb抓包&#xff0c;linux下如何操作呢&#xff1f; 是基于usbmon&#xff0c;本博客简单描述基于usbmon在linux系统上对通过usb口进行发送和接收的数据的抓包流程&#xff0c;分别描…

Unity SnapScrollRect 滚动 匹配 列表 整页

展示效果 原理: 当停止滑动时 判断Contet的horizontalNormalizedPosition 与子Item的缓存值 相减,并得到最小值&#xff0c;然后将Content horizontalNormalizedPosition滚动过去 使用方式&#xff1a; 直接将脚本挂到ScrollRect上 注意&#xff1a;在创建Content子物体时…

Python初学者须知(10)初识条件判断

本系列博客主要针对的是Python初学者。Python语言简洁、强大的特性吸引了越来越多的技术人员将他们的项目转移到Python上。目前&#xff0c;Python已经成为计算机行业最流行的编程语言之一。笔者考虑到Python初学者的多元化&#xff08;Python学习者可能是对编程感兴趣的中学生…

[小程序]API、数据与事件

一、API ①事件监听API 以on开头&#xff0c;用来监听事件的触发&#xff08;如wx.inWindowResize&#xff09; ②同步API 以Sync结尾&#xff0c;且可以通过函数返回值获取&#xff0c;执行错误会抛出异常&#xff08;如wx.setStorageSync&#xff09; ③异步API 类似网页中的…

记录一个sql:查询商品码对应多个商品的商品码

目录 背景sql 语句总结 背景 一个项目中&#xff0c;商品表和商品码表是一对多的关系&#xff0c;但由于程序没有控制好&#xff0c;导致有些商品码对应有多个商品&#xff0c;为了修正数据&#xff0c;我们得把商品码对应多个商品的商品码找出来. sql 语句 goods_detail表结构…

【Spring 篇】MyBatis中的CRUD魔法:数据之美的四重奏

MyBatis&#xff0c;这个数据持久化的魔法师&#xff0c;以其优雅的SQL映射和简洁的配置文件&#xff0c;为我们呈现出一场CRUD&#xff08;Create, Read, Update, Delete&#xff09;的奇妙之旅。在这篇博客中&#xff0c;我们将深入探讨MyBatis中的增、删、改、查操作&#x…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

Spring Security 优化鉴权注解:自定义鉴权注解的崭新征程

文章目录 1. 引言2. Spring Security基础2.1 Spring Security概述2.2 PreAuthorize注解 3. 自定义鉴权注解的优势3.1 业务语义更明确3.2 参数化鉴权更灵活3.3 可维护性更好 4. 实现自定义鉴权注解4.1 创建自定义注解4.2 实现鉴权逻辑4.3 注册自定义注解和逻辑4.4 使用自定义注解…

Vagrant创建Oracle RAC环境示例

利用Vagrant安装Oracle RAC&#xff08;默认为non-CDB模式&#xff09;&#xff0c;生成2台虚机&#xff0c;耗时约1小时。 node1: -----------------------------------------------------------------node1: INFO: 2024-01-11 18:25:54: Make create database commandnode1: …

有关Quick BI中lod_fixed函数中以MAX()作为过滤条件报错

一、Quick BI中的lod_fixed函数 lod_fixed{维度1[,维度2]...:聚合表达式[:过滤条件]} 作用&#xff1a;使用指定维度进行计算而不引用任何其他维度。其中&#xff0c; 维度1[,维度2]...&#xff1a;声明维度&#xff0c;指定聚合表达式要连接到的一个或多个维度。使用逗号分…

【HarmonyOS】掌握布局组件,提升应用体验

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

DP活动:以太网HMI线下培训RA6M3 HMI Board[MQTT Squareline LVGL]

以太网HMI线下培训-环境准备 这是官方社群的文档&#xff1a;【腾讯文档】以太网线下培训&#xff08;HMI-Board&#xff09;所有教程都在这~ https://docs.qq.com/doc/DY0FIWFVuTEpORlNn R A 6 M 3 H M I − B o a r d \textcolor{#4183c4}{RA6M3 HMI-Board} RA6M3HMI−Board…

鼠标移动高亮边框

这个其实我也没有很明白&#xff0c;写的比较粗糙。 说一下步骤&#xff1a; 1.在界面上放上几排的div&#xff0c;要求做成卡片网格布局。 2.每一个卡片年内放置一个div&#xff0c;写文字或者其他都可以&#xff0c;要求不设置高度使用position: absolute; inset: 1px;将元素…

lattice Diamond Programmer程序下载

Lattice Diamond Programmer Diamond Programmer程序下载1 Diamond Programmer启动2 Diamond Programmer程序烧写3 Cannot Identify Device错误解决 Diamond Programmer程序下载 Diamond Programmer适用于Lattice公司的FPGA器件与CPLD器件的程序下载&#xff0c;其下载步骤如下…