网络编程 0905作业

news2024/9/25 1:23:32

作业

1、流式域套接字敲一遍。

服务器 server.c 代码

#include <myhead.h>
#define BACKLOG 10

int main(int argc, const char *argv[])
{
	//1、创建流式域套接字
	int oldfd = socket(AF_UNIX,SOCK_STREAM,0);
	if(oldfd == -1)
	{
		perror("socket");
		return -1;
	}

	//2、判断文件存在存在就删除
	if(access("./myserver",F_OK)==0)
	{
		if(unlink("./myserver")==-1)
		{
			perror("unlink");
			return -1;
		}
	}
	printf("删除文件成功\n");

	//3、定义结构体信息并绑定
	struct sockaddr_un server;
	server.sun_family = AF_UNIX;
	strcpy(server.sun_path,"./myserver");

	if(bind(oldfd,(struct sockaddr *)&server,sizeof(server))==-1)
	{
		perror("bind");
		return -1;
	}
	printf("绑定成功\n");

	//4、监听
	if(listen(oldfd,BACKLOG)==-1)
	{
		perror("listen");
		return -1;
	}
	printf("监听成功\n");

	//5、接收客户端请求
	int newfd = accept(oldfd,NULL,NULL);
	if(newfd==-1)
	{
		perror("accept");
		return -1;
	}
	printf("接收客户端请求成功\n");

	//6、数据收发
	char buff[1024];
	while(1)
	{
		int len = recv(newfd,buff,sizeof(buff),0);

		if(len==0)
		{
			printf("客户端跑了\n");
			break;
		}
		strcat(buff,"^_^");
		
		send(newfd,buff,sizeof(buff),0);
		printf("转发成功\n");
	}
	close(newfd);
	close(oldfd);
	return 0;
}

客户端 clinet.c 代码

#include <myhead.h>

int main(int argc, const char *argv[])
{
	//1、创建套接字
	int oldfd = socket(AF_UNIX,SOCK_STREAM,0);
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}

	//2、判断文件是否存在,存在就删除
	if(access("./myclient",F_OK)==0)
	{
		if(unlink("./myclient")==-1)
		{
			perror("unlink");
			return -1;
		}
	}

	//3、绑定(可选)
	struct sockaddr_un client;
	client.sun_family  =AF_UNIX;
	strcpy(client.sun_path,"./myclient");

	if(bind(oldfd,(struct sockaddr *)&client,sizeof(client))==-1)
	{
		perror("bind");
		return -1;
	}

	struct sockaddr_un server;
	server.sun_family  =AF_UNIX;
	strcpy(server.sun_path,"./myserver");//很重要,连接服务器的文件,而不是自己的文件

	//4、连接服务器
	if(connect(oldfd,(struct sockaddr *)&server,sizeof(server))==-1)
	{
		perror("connect");
		return -1;
	}
	printf("连接服务器成功\n");
	
	//5、收发信息
	char buff[1024];
	while(1)
	{
		bzero(buff,sizeof(buff));

		printf("请输入要发送的信息:");
		fgets(buff,sizeof(buff),stdin);
		buff[strlen(buff)-1] = '\0';

		send(oldfd,buff,sizeof(buff),0);//发送信息
		printf("发送成功\n");

		if(strcmp(buff,"quit")==0)
		{
			break;
		}

		recv(oldfd,buff,sizeof(buff),0);//接收服务器信息
		printf("接收服务器的信息:%s\n",buff);//输出接收到的信息

	}
	close(oldfd);
	return 0;
}

运行结果:

2.、UDP的客户端服务器实现一遍。

UDP服务器 UDPserver.c 代码

#include <myhead.h>
#define SERPORT 6666
#define SERIP "192.168.19.128"

int main(int argc, const char *argv[])
{
	//1、创建套接字
	int oldfd = socket(AF_INET,SOCK_DGRAM,0);//SOCK_DGRAM:UDP
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}
	//2、绑定
	struct sockaddr_in sin = {
		.sin_family = AF_INET,
		.sin_port = htons(SERPORT),
		.sin_addr.s_addr = inet_addr(SERIP)
	};
	if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)
	{
		perror("bind");
		return -1;
	}

	//3、收发消息
	struct sockaddr_in cin;
	socklen_t cinlen = sizeof(cin);

	char buff[100];
	while(1)
	{
		memset(buff,0,sizeof(buff));
		//阻塞后就可以了
		int len = recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,&cinlen);//不用管谁发的
		if(len==0)
		{
			printf("客户端跑了\n");
			break;
		}
		printf("服务器接收的信息:%s\n",buff);
	}
	close(oldfd);
	return 0;
}

UDP客户端 clinet.c 代码

#include <myhead.h>
#define CLIPORT 6666
#define CLIIP "192.168.19.128"
int main(int argc, const char *argv[])
{
	//1、创建套接字
	int oldfd = socket(AF_INET,SOCK_DGRAM,0);
	if(oldfd ==-1)
	{
		perror("socket");
		return -1;
	}

	//2、收发信息
	struct sockaddr_in cin = {
		.sin_family = AF_INET,
		.sin_port = htons(CLIPORT),
		.sin_addr.s_addr = inet_addr(CLIIP)
	};

	char buff[1024];
	while(1)
	{
		printf("客户端发消息:");
		fgets(buff,sizeof(buff),stdin);
		sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));
		printf("发送成功\n");
	}
	close(oldfd);
	return 0;
}

运行结果:

知识梳理

组播

域套接字

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

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

相关文章

盘点2024年热门的4款高效的AI写作软件

AI 写作的魅力在于它可以在短时间内完成一篇结构完成整&#xff0c;逻辑清晰的文章内容&#xff1b;并且能够理解用户的需求&#xff0c;然后使用丰富的词汇和句式帮助表达出来。现在各种AI写作软件有很多&#xff0c;为了能够帮助大家更好的解决写作问题&#xff0c;我找了4个…

[001-07-001].第1节:Redis中的BigKey使用分析

我的后端学习大纲 我的Redis学习大纲 1、MorKey分析&#xff1a; 1.1.数据准备&#xff1a; a.大批量往Redis中插入100W数据: 1.Linux Bash下面执行如下命令&#xff0c;是将100万条命令写入到temp目录下的一个临时文件中&#xff1a; 2.通过redis提供的管道–prpe命令插入1…

期权时间价值是什么?期权时间价值的影响分析

今天带你了解期权时间价值是什么&#xff1f;期权时间价值的影响分析。期权会随时间的流逝价值递减。这个特点有利月义务仓(卖出开仓)&#xff0c;不利于权利仓(买入开仓)。远期合约消耗慢&#xff0c;近期合约消耗快。实值合约消耗慢&#xff0c;虚值合约消耗快。 期权管理时…

企业精英引领未来,大数据讲座照亮中职学子职业航道

为深化校企合作模式&#xff0c;加速产教融合步伐&#xff0c;搭建起职业教育与职场世界的无缝对接桥梁&#xff0c;唯众企业携手武汉市第二职业教育中心&#xff08;简称“武汉二职”&#xff09;&#xff0c;共同举办了一场别开生面的专题讲座。此次活动不仅促进了企业与学生…

MOS管烧毁的原因

MOS管作为电子设备中常用的功率开关器件&#xff0c;因其高效能、低导通损耗和快速开关速度&#xff0c;广泛应用于各类电源、电机控制和电力电子系统中。然而&#xff0c;在实际应用中&#xff0c;MOS管烧毁的现象时有发生&#xff0c;通常伴随着电路故障或设计问题。 1. 过…

Circuitjs 的选项设置

选项设置位于 “菜单–选项” 下, 包含显示, 定位, 编辑, 颜色等方面的设置项. 显示电流 勾选后, 导线及元件中会有小点在不断移动, 以模拟电流的移动. 小点移动的速度还反应了电流的大小. 移动快说明电流大, 移动慢说明电流小. 另: 小点移动的速度还受右侧栏 “电流速度” …

Nginx location 和 proxy_pass 配置详解

概述 Nginx 配置中 location 和 proxy_pass 指令的不同组合方式及其对请求转发路径的影响。 配置效果 1. location 和 proxy_pass 都带斜杠 / location /api/ {proxy_pass http://127.0.0.1:8080/; }访问地址&#xff1a;www.hw.com/api/upload转发地址&#xff1a;http://…

模型案例:| 网球识别模型

导读 2023年以ChatGPT为代表的大语言模型横空出世&#xff0c;它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力&#xff0c;为人工智能技术的发展开辟了新的可能性。同时&#xff0c;人工智能技术正在进入各种应用领…

minio实现大文件断点续传

最近工作中遇到一个需求&#xff0c;用户需要上传大文件几百M&#xff0c;为了更好的用户体验&#xff0c;需要支持断点续传&#xff0c;秒传&#xff0c;上传进度条等功能。需求如下&#xff1a; 方案有两种&#xff1a; 第一种&#xff1a;前端直接将整个大文件丢到后端&…

嵌入式初学-C语言-数据结构--四

栈 1. 基本概念 栈是一种逻辑结构&#xff0c;是特殊的线性表。特殊在&#xff1a; 只能在固定的一端操作 只要满足上述条件&#xff0c;那么这种特殊的线性表就会呈现一种“后进先出”的逻辑&#xff0c;这种逻辑就被称为栈。栈 在生活中到处可见&#xff0c;比如堆叠的盘子…

蓝牙串口模块JDY-31(基于STM32F103C8T6HAL库)

1.蓝牙模块简介 1.1 蓝牙模块简介 蓝牙串口模块用于单片机和手机之间的通信&#xff0c; JDY-31有6针脚和4针脚版本&#xff0c;6针脚插中间4根即可。 JDY-31是一个从机&#xff0c;HC-05是主从机一体的。HC-05使用的时候需要进行配对&#xff0c;JDY-31使用的时候不需要配对…

千万补贴计划,“健康中国行,陪诊惠民工程——陪诊志愿服务”全面开展

为了全面落实党的二十大报告关于“提高全社会文明程度&#xff0c;完善志愿服务制度和工作体系”和对志愿服务的一系列指示&#xff1a;“志愿服务是社会文明进步的重要标志&#xff0c;是广大志愿者奉献爱心的重要渠道”&#xff0c;“要为志愿服务搭建更多平台&#xff0c;更…

快速掌握AI算法基础:对于AI行业的“共同语言”入门指南

对于非相关专业的AI产品或者想要转型AI产品的同学&#xff0c;算法知识晦涩难懂&#xff0c;如何用很短的时间快速入门&#xff0c;让你在AI领域更加游刃有余。 一、机器学习、深度学习、强化学习的定义 1、机器学习&#xff08;Machine Learning, ML&#xff09; 机器学习是…

99%的Java程序员不知道的Java Instrument

Java Instrumentation API 是一个强大的工具&#xff0c;它允许开发人员在运行时修改字节码&#xff0c;而无需重新编译或修改源代码。这对于性能监控、日志记录、安全审计等场景非常有用。本文将深入探讨Java Instrumentation的基础知识&#xff0c;并通过具体的代码示例来展示…

【全网最全】2024年数学建模国赛C题超详细保奖思路+可视化图表+成品论文+matlab/python代码等(后续会更新

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 基于优化模型的农作物的种植策略 摘要 随着农业生产向集约化和智能化方向发展&#xff0c;优化种植策略以最大化经济收益成为当前农业研究中的重要问题。本…

828华为云征文|部署个人博客管理系统 Ghost

828华为云征文&#xff5c;部署个人博客管理系统 Ghost 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Ghost3.1 Ghost 介绍3.2 Docker 环境搭建3.3 Ghost 部署3.4 …

记一次mysql锁等待超时问题

背景 如图所示&#xff0c;一个简单的删除语句&#xff0c;抛出了Lock wait timeout exceeded; try restarting transaction异常&#xff0c;查询这条记录&#xff0c;并尝试修改这条记录&#xff0c;发现修改操作都被hang住了 原因 待补充 解决方法 在mysql里&#xff0c…

营养三餐轻松搭配:健康生活从早餐开始

在如今的快节奏生活中&#xff0c;健康饮食与快捷管用的减调计划&#xff0c;已成为了许多人关注的焦点。合理的三餐搭配不仅能帮助我们控制形体&#xff0c;还能提升生活质量。今天&#xff0c;就让我们一起来学习一套科学的三餐减调套餐&#xff0c;让你在享受美食的同时&…

tuya open-sdk 1.0.0 发布

我们很高兴地宣布本次更新&#xff0c;带来了多项改进和新功能&#xff0c;旨在提升开发体验和效率。以下是具体更新内容&#xff1a; 代码标准化&#xff1a;实现了代码库的格式统一&#xff0c;引入了 clang-format 和 pre-commit 工具进行自动化代码格式调整&#xff0c;确保…

Docker 配置国内镜像源

由于 GFW 的原因&#xff0c;在下载镜像的时候&#xff0c;经常会出现下载失败的情况&#xff0c;此时就可以使用国内的镜像源。 什么是镜像源&#xff1a;简单来说就是某个组织&#xff08;学校、公司、甚至是个人&#xff09;先通过某种手段将国外的镜像下载下来&#xff0c;…