2024.02.29作业

news2024/12/19 19:40:50

1. TCP模型

server

#include "test.h"

#define SER_IP "192.168.191.128"
#define SER_PORT 9999

int main(int argc, char const *argv[])
{
    int sfd = -1;
    sfd = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == sfd)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    if (bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("bind error");
        return -1;
    }

    if (listen(sfd, 128) == -1)
    {
        perror("listen error");
        return -1;
    }

    struct sockaddr_in cin;
    socklen_t socklen = sizeof(cin);

    int newfd = accept(sfd, (struct sockaddr*)&cin, &socklen);
    if (newfd == -1)
    {
        perror("accept error");
        return -1;
    }

    printf("newfd = %d\n", newfd);
    printf("IP: %s, port: %d\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));

    char rbuf[128] = "";
    while (1)
    {
        bzero(rbuf, sizeof(rbuf));

        int res = read(newfd, rbuf, sizeof(rbuf));
        if (res == 0)
        {
            printf("客户端下线\n");
            break;
        }

        printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), rbuf);

        strcat(rbuf, "*_*");
        write(newfd, rbuf, strlen(rbuf));
    }

    close(sfd);
    close(newfd);

    return 0;
}

client

#include "test.h"

#define SER_IP "192.168.191.128"
#define SER_PORT 9999

int main(int argc, char const *argv[])
{
    int sfd = -1;
    sfd = socket(AF_INET, SOCK_STREAM, 0);
    if (-1 == sfd)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    if (connect(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("connect error");
        return -1;
    }

    char wbuf[128] = "";
    while (1)
    {
        bzero(wbuf, sizeof(wbuf));

        printf("请输入>>>");
        fgets(wbuf, sizeof(wbuf), stdin);
        wbuf[strlen(wbuf) - 1] = 0;

        send(sfd, wbuf, strlen(wbuf), 0);
        printf("发送成功\n");

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

        bzero(wbuf, sizeof(wbuf));
        recv(sfd, wbuf, sizeof(wbuf), 0);
        printf("收到的消息: %s\n", wbuf);
    }

    close(sfd);

    return 0;
}

2. UDP模型

server

#include "test.h"

#define SER_IP "192.168.191.128"
#define SER_PORT 9999

int main(int argc, char const *argv[])
{
    int sfd = -1;
    sfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (-1 == sfd)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);
    if (bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) == -1)
    {
        perror("bind error");
        return -1;
    }
    printf("bind success\n");

    struct sockaddr_in cin;
    socklen_t socklen = sizeof(cin);
    char rbuf[128] = "";
    while (1)
    {
        bzero(rbuf, sizeof(rbuf));

        recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr*)&cin, &socklen);

        printf("收到消息: %s\n", rbuf);

        strcat(rbuf, "*_*");
        if (sendto(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr*)&cin, socklen) == -1)
        {
            perror("sendto error");
            return -1;
        }
    }

    close(sfd);

    return 0;
}

client

#include "test.h"

#define SER_IP "192.168.191.128"
#define SER_PORT 9999

int main(int argc, char const *argv[])
{
    int sfd = -1;
    sfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (-1 == sfd)
    {
        perror("socket error");
        return -1;
    }
    printf("sfd = %d\n", sfd);

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(SER_PORT);
    sin.sin_addr.s_addr = inet_addr(SER_IP);

    char wbuf[128] = "";
    while (1)
    {
        bzero(wbuf, sizeof(wbuf));

        printf("请输入>>>");
        fgets(wbuf, sizeof(wbuf), stdin);
        wbuf[strlen(wbuf) - 1] = 0;

        sendto(sfd, wbuf, strlen(wbuf), 0, (struct sockaddr*)&sin, sizeof(sin));
        printf("发送成功\n");

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

        bzero(wbuf, sizeof(wbuf));
        recvfrom(sfd, wbuf, sizeof(wbuf), 0, NULL, NULL);
        printf("收到的消息: %s\n", wbuf);
    }

    close(sfd);

    return 0;
}

思维导图

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

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

相关文章

六、继承(一)

1 继承的引入 以往我们想分别实现描述学生、老师的类,可能会这样子做: class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…

数据中台:数字中国战略关键技术实施

这里写目录标题 前言为何要建设数据中台数据中台建设痛点数据中台学习资料聚焦前沿,方法论体系更新与时俱进,紧跟时代热点深入6大行业,提炼实践精华大咖推荐,数字化转型必备案头书 前言 在数字中国这一国家战略的牵引下&#xff0…

软考56-上午题-【数据库】-数据库设计步骤2

一、回顾:数据库设计的步骤 1、用户需求分析:手机用户需求,确定系统边界; 2、概念设计(概念结构设计):是抽象概念模型,较理想的是采用E-R方法。 3、逻辑设计:E-R图——…

在四维轻云平台的使用过程中,遇到这些问题应该怎么办?

「四维轻云」是一款轻量化的地理空间数据管理云平台,支持地理空间数据的在线管理、编辑及分享。那么,在四维轻云平台的使用过程中,遇到这些问题应该怎么办? 1、启动插件后,上传界面仍提示“请启动插件” 请先升级插件…

IDEA类和方法注释模板设置

一、概述 IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模板采用Eclipse的格式,下面先贴…

十五 超级数据查看器 讲解稿 外观设置

十五 超级数据查看器 讲解稿 外观设置 视频讲座地址 讲解稿全文: 大家好,今天讲解超级数据查看器,详情界面的外观设置。 首先,我们打开超级数据查看器。 本节课以成语词典为例来做讲述。 我们打开成语词典这个表,随便选一条记录点击&#x…

导轨安装模拟量直流信号隔离转换放大器0-±5V/0-±10V/0-10V/0-20mA/4-20mA/0-±10mA/0-±20mA

概述: 导轨安装DIN11 IPO EM系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要电量隔离测控的行业。该模块内部嵌入了一个高效微功率的电源&#xff0…

kettle下载及安装

JDK下载 安装kettle之前需要安装JDK JDK下载链接:JDK下载 配置环境变量: 新建系统变量:变量值为JDK安装路径 Path新增: kettle下载 链接地址:PDI(kettle) 点击下载 同意 Click here to a…

python和nodejs一键安装当前项目所有依赖

python和nodejs一键安装当前项目所有依赖。群里有人问怎么快速安装网上下载的源码里面的依赖。所以在这里分享一下。更多问题可以自己加群917400262问我。 目录导航 1.0 python一键安装当前项目所有依赖2.0 nodejs一键安装当前项目所有依赖 1.0 python一键安装当前项目所有依赖…

Java数据结构-----ArrayList与顺序表

目录 一、线性表 二、顺序表 接口的实现 三、ArrayList简介 四、 ArrayList使用 1. ArrayList的构造 2.ArrayList常见操作 3. ArrayList的遍历 4.ArrayList的扩容机制 五、ArrayList的具体使用 简单的洗牌算法 一、线性表 线性表(linear l…

WordPress上传图片错误:不是合法的JSON响应

最近在进行WordPress迁移至新服务器的过程中,遭遇到一个棘手的问题,即在编辑文章并上传图片时,不断遭遇“此响应不是合法的JSON响应”的错误。经过多次验证和搜索,最终确定问题的根本原因并不在于禁用 Gutenberg 编辑器或安装经典…

ensp路由启动失败41错误及ensp安装【附安装包】(亲测!!!)

我用夸克网盘分享了 「eNSP安装教程(非常详细)从零基础入门到精通,看完这一篇就够了【附安装包】_ensp下载安装教程-CSDN博客.pdf」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。 链接&#xf…

神经网络结构——CNN、RNN、LSTM、Transformer !!

文章目录 前言 一、什么是CNN 网络结构 解决问题 工作原理 实际应用 二、什么是RNN 网络结构 解决问题 工作原理 应用场景 三、什么是LSTM 网络结构 解决问题 工作原理 应用场景 四、什么是Transformer 网络结构 解决问题 工作原理 BERT GPT 前言 本文将从什么是CNN&#xff1…

现货黄金交易商运作模式大解密

也许现货黄金投资者都知道自己需要通过交易平台才能进入市场买卖,但很多人却并不知道交易平台如何处理自己的交易订单。其实交易商主要分为四种类型:交易员平台、无交易员平台、直接处理式平台以及电子通信网络平台,本文将为大家介绍一下它们…

WP外贸营销型网站模板

WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题,适合时尚服装行业搭建wordpress企业官网使用。 零件配件WordPress外贸建站模板 汽车行业零配件WordPress外贸建站模板,卖配件、零件的外贸公司可以使用的WordPress主题。 https://www.jia…

李沐动手学习深度学习——3.5练习

减少batch_size(如减少到1)是否会影响读取性能? 肯定会影响,计算机io性能而言,随着batch_size增大,读取越来越快,需要的时间越少。这里会涉及到计算机操作系统的知识点,内存与硬盘之…

获取 Windows 通知中心弹窗通知内容(含工具汉化)

目录 前言 技术原理概述 测试代码和程序下载连接 本文出处链接:https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 从 Windows 8.1 开始,Windows 通知现在以 Toast 而非 Balloon 形式显示( Bollon 通知其实现在是应用…

ARM总结and复习

安装交叉编译工具链 a. 为什么安装 因为arm公司的指令集在不断迭代升级,指令集日益增多,而架构是基于指令集研发的,所以架构不一样,指令集也不一样 eg:arm架构使用的是arm指令集 x86架构使用的是x86指令集 而我们日常开发环境中linux的架构…

QueryDet代码解析

配置文件 # 表示该配置文件是基于另一个配置文件BaseRetina.yaml进行扩展和覆盖的 _BASE_: "../BaseRetina.yaml" # 指定输出目录,训练过程中的日志、模型权重和评估结果将保存在该目录下。 OUTPUT_DIR: "work_dirs/visdrone_querydet" # 指定…

前端面试 跨域理解

2 实现 2-1 JSONP 实现 2-2 nginx 配置 2-2 vue 开发中 webpack自带跨域 2 -3 下载CORS 插件 或 chrome浏览器配置跨域 2-4 通过iframe 如:aaa.com 中读取bbb.com的localStorage 1)在aaa.com的页面中,在页面中嵌入一个src为bbb.com的iframe&#x…