5月21号作业

news2024/11/18 3:33:54

思维导图

代码实现

TCP域套接字服务器

#include <header.h>
#include <math.h>

int main(int argc, const char *argv[])
{
	//为通信创建一个端点
	int sfd=socket(AF_UNIX,SOCK_STREAM,0);
	//参数1:说明使用的三ipv4通信域
	//参数2:说明使用的三TCP面向连接的通信方式
	//参数3: 由于参数2中已经指定通信方式,填0即可
	if(sfd==-1)
	{
		perror("socket error");
		return -1;
	}
	printf("socket succeess sfd=%d\n",sfd);//3
	//判断要绑定的套接字文件是否存在
	if(access("./unix",F_OK)==0)
	{
		//文件存在删除,不存在创建
		if(unlink("./unix")==-1)
		{
			perror("unix error");
			return -1;
		}	
	}	
	//绑定ip和端口号
	//准备地址信息结构体
	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;
	}
	printf("bind success\n");
	//将套接字设置成被动监听状态
	if(listen(sfd,128)==-1)
	{
		perror("listen error");
		return -1;
	}
	//阻塞等待客户端连接
	//定义用于接受客户端信息的容器
	struct sockaddr_un cun;
	socklen_t addrlen = sizeof(cun);
	int newfd=accept(sfd,(struct sockaddr*)&cun,&addrlen);
	if(newfd==-1)
	{
		perror("accept error");
		return -1;
	}
	printf("[%s]发送连接请求\n",cun.sun_path);
	char rbuf[128]="";
	while(1)
	{
		bzero(rbuf,sizeof(rbuf));
		int retval=recv(newfd,rbuf,sizeof(rbuf),0);
		if(retval==0)
		{
			printf("客户端已经下线\n");
			break;
		}
		
		printf("[%s]:%s\n",cun.sun_path,rbuf);

		strcat(rbuf,"#_#");
		send(newfd,rbuf,strlen(rbuf),0);
		printf("发送成\n");

	}
	close(newfd);
	close(sfd);

	return 0;
}

TCP域套接字客户端

#include <header.h>

int main(int argc, const char *argv[])
{
	//创建用于通信的套接字文件描述符
	int cfd =socket(AF_UNIX,SOCK_STREAM,0);
	if(cfd==-1)
	{
		perror("socket error");
		return -1;
	}
	printf("cfd=%d\n",cfd);
	//判断要绑定的套接字文件是否存在
	if(access("./lins",F_OK)==0)
	{
		//文件存在删除,不存在创建
		if(unlink("./lins")==-1)
		{
			perror("lins error");
			return -1;
		}	
	}	

	//填充客户端地址信息结构体
	struct sockaddr_un cun;
	cun.sun_family=AF_UNIX;
	strcpy(cun.sun_path,"./lins");
	//绑定
	if(bind(cfd,(struct sockaddr*)&cun,sizeof(cun))==-1)
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");
	//准备对端地址信息结构体
	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 error");
		return -1;
	}
	printf("connect success");
	//数据收发
	char wbuf[128]="";
	char rbuf[128]="";
	while(1)
	{
		//从终端上获取要发送的数据
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf)-1]=0;
		//将数据发送给服务器
		send(cfd,wbuf,strlen(wbuf),0);
		printf("发送成功\n");
		//接收服务器发来的消息
		bzero(rbuf,sizeof(rbuf));
		recv(cfd,rbuf,sizeof(rbuf),0);
		printf("服务器发来的消息为:%s\n",rbuf);
	}
	//关闭套接字
	close(cfd);


	
	return 0;
}

TCP域套接字服务器

#include<header.h>

int main(int argc, const char *argv[])
{
    //1、创建用于通信的套接字文件描述符
    int sfd = socket(AF_UNIX, SOCK_DGRAM, 0);
    if(sfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);//3
	//判断要绑定的套接字文件是否存在
	if(access("./unix",F_OK)==0)
	{
		//文件存在删除,不存在创建
		if(unlink("./unix")==-1)
		{
			perror("unix error");
			return -1;
		}	
	}	
    //2、绑定IP地址和端口号
    //2.1 填充地址信息结构体
    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;
	strcpy(sun.sun_path,"./unix");
       //2.2 绑定
    if(bind(sfd, (struct sockaddr*)&sun, sizeof(sun)) ==-1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");
    
    //3、数据收发
    char rbuf[128] = "";
    //准备接受对端的地址信息
    struct sockaddr_un cun;
    socklen_t addrlen = sizeof(cun);

    while(1)
    {
        //清空容器
        bzero(rbuf,sizeof(rbuf));

        //读取数据
        //read(sfd, rbuf, sizeof(rbuf));
        recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr*)&cun, &addrlen);
        printf("收到消息为:%s\n", rbuf);

        //将收到的消息,加个笑脸回过去
        strcat(rbuf, "*_*");
        //if(write(sfd, rbuf, strlen(rbuf))==-1)
        if(sendto(sfd, rbuf, strlen(rbuf), 0, (struct sockaddr*)&cun, sizeof(cun))==-1)
        {
            perror("write error");
            return -1;
        }
        printf("发送成功\n");

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

    return 0;
}

TCP域套接字客户端

#include<header.h>
int main(int argc, const char *argv[])
{
    //1、创建用于通信的套接字文件描述符
    int cfd = socket(AF_UNIX, SOCK_DGRAM, 0);
    if(cfd == -1)
    {
        perror("socket error");
        return -1;
    }
    printf("cfd = %d\n", cfd);            //3
	//判断要绑定的套接字文件是否存在
	if(access("./lins",F_OK)==0)
	{
		//文件存在删除,不存在创建
		if(unlink("./lins")==-1)
		{
			perror("lins error");
			return -1;
		}
	}

    //2.1 填充地址信息结构体
    struct sockaddr_un cun;
    cun.sun_family = AF_UNIX;
	strcpy(cun.sun_path,"./lins");
      //2.2 绑定
    if(bind(cfd, (struct sockaddr*)&cun, sizeof(cun)) ==-1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");

    
    //3、数据收发
    char wbuf[128] = "";
    //填充服务器的地址信息结构体
    struct sockaddr_un sun;
    sun.sun_family = AF_UNIX;
	strcpy(sun.sun_path,"./unix");
       char rbuf[128] = "";

    while(1)
    {
        //清空容器
        bzero(wbuf,sizeof(wbuf));
        bzero(rbuf, sizeof(rbuf));
        
        //从终端上获取信息
        fgets(wbuf, sizeof(wbuf), stdin);
        wbuf[strlen(wbuf)-1] = 0;

        //讲消息发送给服务器
        sendto(cfd, wbuf, strlen(wbuf), 0, (struct sockaddr*)&sun, sizeof(sun));
        printf("发送成功\n");

        //接受服务器发来的消息
        recvfrom(cfd, rbuf, sizeof(rbuf), 0,NULL, NULL);
        printf("收到服务器消息为:%s\n", rbuf);

    }
    
    //4、关闭套接字
    close(cfd);

    return 0;
}

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

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

相关文章

你真的了解HTTPS协议吗

前言 在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用 HTTPS 通信机制可以有效地防止这些问题。本文即将带大家来了解这些。 任何事物都有两面性&#xff0c;为了满足HTTP协议的快&#xff0c;但导致了它有如下的不足&#xff1a; 通信采用明文&#xff08;不加…

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ ■ input 子系统简介 input 子系统就是管理输入的子系统&#xff0c; input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点 ■ input 驱…

模仿高效网络进行目标检测——知识蒸馏

摘要 链接&#xff1a;https://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimicking_Very_Efficient_CVPR_2017_paper.pdf 当前的基于卷积神经网络&#xff08;CNN&#xff09;的目标检测器需要从预训练的ImageNet分类模型中初始化&#xff0c;这通常非常耗时。在本…

【除自身以外数组的乘积】python

目录 思路&#xff1a; 代码&#xff1a; 思路&#xff1a; 直接计算前缀乘积&#xff0c;后缀乘积&#xff0c;然后相乘即可 开始我还在想&#xff0c;遍历一次i&#xff0c;怎么能同时计算前缀乘积和后缀乘积&#xff0c;事实上分开计算比较方便。。 代码&#xff1a; cl…

数据集002:眼疾识别数据集 (含数据集下载链接)

说明 病理性近视&#xff08;Pathologic Myopia&#xff0c;PM&#xff09;的医疗类数据集&#xff0c;包含1200个受试者的眼底视网膜图片&#xff0c;训练、验证和测试数据集各400张。 说明&#xff1a; 如今近视已经成为困扰人们健康的一项全球性负担&#xff0c;在近视人…

CMS Full GC流程以及调优配置

个人博客 CMS Full GC流程以及调优配置 | iwts’s blog CMS CMS 收集器是以实现最短 STW 时间为目标的收集器&#xff0c;所以对于偏业务的后台开发而言&#xff0c;基本上都无脑选CMS了。 多线程收集器&#xff0c;工作在老年代&#xff0c;采用标记清除算法。比较特殊&am…

Three.js 研究:3、创建一个高科技圆环

打开Alpha混合 修改环形颜色&#xff0c;更改发光的颜色&#xff0c;更改发光的强度为2 更改世界环境灯光

基于集成经验模态分解的心电信号降噪和基于希尔伯特变换的R峰检测(MATLAB R2018)

近年来&#xff0c;心脏病已成为危害人类健康最常见的疾病。为了有效预防心脏疾病的发生&#xff0c;往往需要更加准确地采集与诊断心电信号&#xff0c;以便于更好地反映心脏情况。心电信号作为人体生理信号&#xff0c;对于识别心脏异常和心脏疾病具有重要的参考价值。心电信…

Docker 常用命令大全!!

Docker 常用命令 一、启动类1. 启动 docker2. 关闭 docker3. 重新启动 docker4. docker 设置自启动5. 查看 docker 运行状态6. 查看 docker 版本号等信息7. docker 帮助 二、 镜像类1. 查看镜像2. 搜索镜像3. 拉取镜像4. 运行镜像5. 删除镜像6. 加载镜像7. 保存镜像 三、容器类…

电机转速计算(基于码盘和IO外部中断)

目录 概述 1 硬件介绍 1.1 整体硬件结构 1.2 模块功能介绍 2 测速框架介绍 2.1 测速原理 2.2 软件框架结构 3 使用STM32Cube配置Project 3.1 准备环境 3.2 配置参数 3.3 生成Project 4 功能实现 4.1 电机控制代码 4.2 测试代码 4.3 速度计算 5 测试 5.1 编写测…

0基础认识C语言

为了给0基础一个舒服的学习路径&#xff0c;就有了这个专栏希望带大家一起进步。 话不多说&#xff0c;开始正题。 一、C语言的一段小历史 C语言的设计要追溯到20世纪60年代末和70年代初&#xff0c;在那个时代美国有这么一号人叫做丹尼斯.里奇&#xff0c;他和同事肯.汤普逊…

pyqt 浮动窗口QDockwidget

pyqt 浮动窗口QDockwidget QDockwidget效果代码 QDockwidget QDockWidget 是 PyQt中的一个控件&#xff0c;它提供了一个可以停靠在主窗口边缘或者浮动在屏幕上的窗口小部件&#xff08;widget&#xff09;。QDockWidget 允许用户自定义其界面&#xff0c;并提供了灵活的停靠和…

【数据结构】栈和队列超详细解析

最重要的就是不要去看远方模糊的&#xff0c;而要做手边清楚的事。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;栈 • &#x1f330;1.什么是栈&#xff1f; • &#x1f330;2.如何实现栈 • &#x1f330;3.栈的基本操作…

一文教你使用stream流轻松解决java项目数据枚举显示问题

本篇文章主要讲解java枚举、vo实体类通过stream流形式输出枚举参数的方法。 日期&#xff1a;2024年5月26日 作者&#xff1a;任聪聪 本文代码实例附件&#xff1a;https://download.csdn.net/download/hj960511/89361611 实际效果 可以看到在枚举参数的基础上&#xff0c;我们…

56.合并区间

class Solution {public int[][] merge(int[][] intervals) {// 对 intervals 数组按照每个区间的开始位置进行排序Arrays.sort(intervals, (o1, o2) -> o1[0] - o2[0]);int len intervals.length;// 创建结果数组 res&#xff0c;初始化长度为 intervals 的长度int[][] re…

【Text2SQL 经典模型】TypeSQL

论文&#xff1a;TypeSQL: Knowledge-Based Type-Aware Neural Text-to-SQL Generation ⭐⭐⭐ Code: TypeSQL | GitHub 一、论文速读 本论文是在 SQLNet 网络上做的改进&#xff0c;其思路也是先预先构建一个 SQL sketch&#xff0c;然后再填充 slots 从而生成 SQL。 论文发…

Thinkphp5内核宠物领养平台H5源码

源码介绍 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP&#xff0c;适合做猫狗宠物类的发信息发布&#xff0c;当然懂的修改一下&#xff0c;做其他信息发布也是可以的。 源码预览 源码下载 https://download.csdn.net/download/huayula/89361685

什么是云渗透测试?

推荐阅读&#xff1a; 什么是安全态势&#xff1f; 什么是人肉搜索 什么是恶意软件&#xff1f; 什么是数字取证&#xff1f; 什么是语音网络钓鱼&#xff1f; 什么是网络安全中的社会工程&#xff1f; 什么是网络安全中的威胁情报&#xff1f; 什么是端点检测和响应 (…

面试中算法(A星寻路算法)

一、问题需求&#xff1a; 迷宫寻路游戏中&#xff0c;有一些小怪物要攻击主角&#xff0c;现在希望你给这些小怪物加上聪 明的AI (Artificial Intelligence&#xff0c;人工智能&#xff09;&#xff0c;让它们可以自动绕过迷宫中的障碍物&#xff0c;寻找到主角的所在。 A星…

flink程序本地运行:No ExecutorFactory found to execute the application

1.问题描述 在idea中运行flink job程序出现如下错误&#xff1a; Exception in thread "main" java.lang.IllegalStateException: No ExecutorFactory found to execute the application. at org.apache.flink.core.execution.DefaultExecutorServiceLoader.getE…