作业-11.22

news2024/11/27 10:31:07

1、TCP服务器和客户端交互

        服务器

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
    fprintf(stderr, "__%d__", __LINE__);\
    perror(msg);\
}while(0)

#define PORT 6666
#define IP "192.168.31.111"


int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET, SOCK_STREAM, 0);
    if(sfd < 0)
    {
        ERR_MSG("socket");
        return -1;
    }

    int reuse = 1;
    if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse ,sizeof(reuse)) < 0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("允许端口快速重用\n");

    struct sockaddr_in sin;
    sin.sin_family         = AF_INET;
    sin.sin_port         = htons(PORT);
    sin.sin_addr.s_addr = inet_addr(IP);

    if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
    {
        ERR_MSG("bind");
        return -1;
    }

    if(listen(sfd, 128) < 0)
    {
        ERR_MSG("listen");
        return -1;
    }
    printf("服务器监听成功\n");

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

    int newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen);
    if(newfd < 0)
    {
        ERR_MSG("newfd");
        return -1;
    }
    printf("newfd = %d link successful!\n", newfd);


    ssize_t res = 0;
    char buf[128] = "";
    while(1)
    {
        bzero(buf, sizeof(buf));

        res = recv(newfd, buf, sizeof(buf), 0);
        if(res < 0)
        {
            ERR_MSG("recv");
            return -1;
        }
        else if(!res)
        {
            printf("newfd = %d link close!\n", newfd);
            break;
        }

        printf("res:%ld, newfd:%d : %s\n", res, newfd, buf);

        strcat(buf, "*_*");
        if(send(newfd, buf, sizeof(buf), 0) < 0)
        {
            ERR_MSG("sen");
            return -1;
        }
        printf("send success\n");
    }

    close(newfd);
    close(sfd);

    return 0;
}

        客户端

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
    fprintf(stderr, "__%d__:", __LINE__);\
    perror(msg);\
}while(0)


#define CLI_PORT 6656
#define CLI_IP     "192.168.31.111"

#define SER_PORT 8888
#define SER_IP     "192.168.31.111"

int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET, SOCK_STREAM, 0);
    if(sfd < 0)
    {
        ERR_MSG("socket");
        return -1;
    }

    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)) < 0)
    {
        ERR_MSG("connect");
        return -1;
    }
    printf("connect success\n");


    ssize_t res = 0;
    char buf[128] = "";
    
    while(1)
    {
        bzero(buf, sizeof(buf));
        //发送
        printf("请输入>>>");
        fgets(buf, sizeof(buf), stdin);
        buf[strlen(buf)-1] = 0;
        
        if(0 == strcmp("quit", buf))
        {
            printf("客户端退出\n");
            break;
        }

        if(send(sfd, buf, sizeof(buf), 0) < 0)
        {
            ERR_MSG("sen");
            return -1;
        }
        printf("send success\n");

        //接收
        res = recv(sfd, buf, sizeof(buf), 0);
        if(res < 0)
        {
            ERR_MSG("recv");
            return -1;
        }
        else if(0 == res)
        {
            printf("服务器断开连接\n");
            break;
        }
        printf(":%s\n", buf);

    }

    close(sfd);    

    return 0;
}

 

 

2、UDP服务器和客户端交互

        服务器

#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
    fprintf(stderr, "__%d__:", __LINE__);\
    perror(msg);\
}while(0)

#define PORT 8888
#define IP  "192.168.31.111"

int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sfd < 0)
    {
        ERR_MSG("socket");
        return -1;
    }

    struct sockaddr_in sin;
    sin.sin_family      = AF_INET;      
    sin.sin_port        = htons(PORT);  
    sin.sin_addr.s_addr = inet_addr(IP);

    if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("bind success\n");

    ssize_t res = 0;
    char buf[128] = "";

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

    while(1)
    {
        bzero(buf, sizeof(buf));
        res = recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin, &addrlen);
        if(res < 0)
        {
            ERR_MSG("recvfrom");
            return -1;
        }
        else if(0 ==strcmp("quit", buf))
        {
            printf("link close ser close.\n");
            break;
        }
        printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);

        strcat(buf, "已发送---->");
        if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin, sizeof(cin)) < 0)
        {
            ERR_MSG("sendto");
            return -1;
        }
        printf("sendto success\n");

    }
    
    close(sfd);

    return 0;
}

        客户端

#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>

#define ERR_MSG(msg) do{\
    fprintf(stderr, "__%d__:", __LINE__);\
    perror(msg);\
}while(0)

#define CLI_PORT 6666
#define CLI_IP  "192.168.31.111"

#define SER_PORT 8888
#define SER_IP  "192.168.31.111"

int main(int argc, const char *argv[])
{
    int sfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sfd < 0)
    {
        ERR_MSG("socket");
        return -1;
    }

    struct sockaddr_in cin;
    cin.sin_family      = AF_INET;      
    cin.sin_port        = htons(CLI_PORT);  
    cin.sin_addr.s_addr = inet_addr(CLI_IP);

    if(bind(sfd, (struct sockaddr*)&cin, sizeof(cin)) < 0)
    {
        ERR_MSG("bind");
        return -1;
    }
    printf("bind success\n");

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

    ssize_t res = 0;
    char buf[128] = "";

    struct sockaddr_in rcvaddr;     
    socklen_t addrlen = sizeof(rcvaddr);
    

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

        if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&sin, sizeof(sin)) < 0)
        {
            ERR_MSG("sendto");
            return -1;
        }
        if(0 == strcmp("quit", buf))
        {
            printf("客户端退出\n");
            break;
        }
        printf("sendto success\n");

        res = recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&rcvaddr, &addrlen);
        if(res < 0)
        {
            ERR_MSG("recvfrom");
            return -1;
        }
        printf("[%s:%d] : %s\n", inet_ntoa(rcvaddr.sin_addr), ntohs(rcvaddr.sin_port), buf);

    
    }
    close(sfd);

    return 0;
}

 

 

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

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

相关文章

Java基础—反射

反射 我们来探讨Java中的一些动态特性&#xff0c;包括反射、注解、动态代理、类加载器等。利用这些特性&#xff0c;可以优雅地实现一些灵活通用的功能&#xff0c;它们经常用于各种框架、库和系统程序中&#xff0c;比如&#xff1a; 1&#xff09;14.5节介绍的Jackson&…

MAC苹果电脑关闭系统完整性保护SIP

苹果电脑从 macOS 10.11 开始引入了系统完整性保护机制SIP&#xff08;System Integrity Protection&#xff09;&#xff0c;目的是帮助普通用户避免恶意 app 通过用户授权的方式获得所有系统权限。通过 System Integrity Protection&#xff0c;苹果实现了对第三方软件的限制…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.14 SpringBoot 整合 quartz

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.14 SpringBoot 整合 quartz5.14.1 任务【定时任务…

Linux-cut

cut命令介绍 cut命令将文件的每一行剪切字节&#xff0c;字符和字段&#xff0c;并将这些字节&#xff0c;字符和字段写到标准输出 提取列&#xff0c;cut命令不能提取空格&#xff0c;可以是制表符或者其他字符 cut [选项][文件] 选项&#xff1a; -b&#xff1a;以字节为单…

2.5、信道的极限容量!

2.5、信道的极限容量&#xff01; 2.5.1、因素影响 由于信号在传输过程中会受到各种因素的影响 例如&#xff1a;这是一个数字信号 当它通过实际的信道后&#xff0c;波形会产生失真。 失真不严重时&#xff0c;在输出端还可根据已失真的波形还原出发送的码元 当失真严重…

G1D20-AnacondaCSKE综述AttacKG终于配好环境啦KG book CTF

先下一个anaconda emmmpipenv install requirements.txt好像不太好用&#xff0c;还不如pycharm中的自动安装 先读论文啦~ 一、CS KE综述 &#xff08;一&#xff09;NER systems 1、判别式模型&生成式模型 判别式模型&#xff1a;学习P&#xff08;Y|X&#xff09;&am…

C语言-结构体(7)

目录 思维导图&#xff1a; 1. 结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 结构成员的类型 1.4 结构体变量的定义和初始化 2. 结构体成员的访问 3. 结构体传参 写在最后&#xff1a; 思维导图&#xff1a; 1. 结构体的声明 1.1 结构的基础知识 结构是一些…

python一键去PDF水印,只需十行代码,超级简单...

用python制作去除 pdf 文件水印脚本前因后果去除水印原理代码剖析1、先查看PDF文档中的水印rgb值是多少2、pdf转换成图片&#xff0c;并去除水印3、图片转为pdf代码整合总结前因后果 弟弟最近要考试&#xff0c;临时抱佛脚在网上找了一堆学习资料复习&#xff0c;这不刚就来找…

机器学习-sklearn-高斯混合模型-学习笔记

文章目录前言一、如何估计参数二、二分类原生代码实现三、sklearn实现模型总结前言 学习笔记 学习视频&#xff1a;https://www.bilibili.com/video/BV1rB4y1v7dA/?spm_id_from333.788&vd_sourceaf83080eba7b379d3fda36e341bdb195 使用高斯混合模型的原因&#xff1a; 模…

03137计算机网络原 - 物理层

物理层 基础概念 OSI模型最底层 功能 为在链路实体间传送比特流而对物理连接的 接通 维持 和 拆除 提供机械,电气,功能和规程方面的方法作用 尽可能屏蔽现有多种多样的硬件设备,传输媒体和通信手段的差异。确保原始数据可以在各种物理媒介上传输任务特性 机械特性 指明接…

Linux环境变量与程序地址空间

Linux环境变量与程序地址空间 文章目录Linux环境变量与程序地址空间1.环境变量1.1 环境变量概念与深入理解1.2 代码获取环境变量的方法1.3 系统调用获取和设置环境变量的方法2.程序地址空间2.1 程序地址空间图(准确来说是进程地址空间图)2.2 程序地址空间的验证2.3 进程地址空间…

概率论中的几个重要悖论问题

1. 蒙提霍尔问题&#xff08;三门问题&#xff09; 三门问题&#xff08;Monty Hall problem&#xff09;亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论&#xff0c;大致出自美国的电视游戏节目Lets Make a Deal。问题名字来自该节目的主持人蒙提霍尔&#xff08;Monty Hall&…

【笑小枫的SpringBoot系列】【十八】SpringBoot中的Properties配置

本文简介&#x1f3a8; 随着我们的演示功能越来越多&#xff0c;里面的配置也越来越多&#xff0c;我们怎么更好的来管理这些配置呢&#xff1f; 实际项目中&#xff0c;我们肯定会有开发环境、测试环境、生产环境&#xff0c;我们又该怎么便捷的配置这些环境呢&#xff1f; …

CANopen之SDO,PDO

一、简述 CAN 总线是一种串行通信协议&#xff0c;具有较高的通信速率的和较强的抗干扰能力&#xff0c;可以作为现场总线应用于电磁噪声较大的场合。由于 CAN 总线本身只定义ISO/OSI 模型中的第一层&#xff08;物理层&#xff09;和第二层&#xff08;数据链路层&#xff09…

nodejs+mysql网上书店图书销售购物商城系统vue

系统功能 此系统的功能分为用户模块和管理员模块&#xff1a; 1、用户后台功能模块包括&#xff1a;首页、个人中心、订单评价管理、我的收藏管理、订单管理模块。 2、前台首页功能模块包括&#xff1a;首页、图书信息、图书资讯、个人中心、后台管理、购物车、在线聊天模块。 …

SAP MDG —— 更好地理解你的数据变更

概念 在SAP MDG on SAP S/4HANA 2021中&#xff0c;SAP发布了一种全新的数据分析框架&#xff1a;变更请求中的主数据变更分析。依赖该框架&#xff0c;你可以为你的最终用户提供强大的数据分析功能&#xff0c;以深度洞悉变更请求中到底变化了哪些数据。 使用这些分析功能&a…

Thinkphp6 分布式事务异常处理 1440 XAER_DUPID: The XID already exists

Mysql分布式事务&#xff0c;前提条件 MySQL中只有当隔离级别设置为Serializable的时候才能使用分布式事务。 执行两个命令确认环境 show variables like innodb_support_xa;show variables like %tx_iso%;异常信息 根据官方分布式示例 public function test(){Db::transa…

input空格回车输入标签

分析 我们自己封装input输入标签需要注意一下几点: 样式实现&#xff0c;span实现标签效果、input隐藏边框(Element-UI可以直接使用tag)。事件监听&#xff0c;确定生成标签的操作&#xff0c;可以是回车,并且需要监听离开焦点的情况。标签限制,最多几个,以及输入验证 html:&…

使用CDC模式改造遗留系统

项目改造背景及挑战 在我们经历的各种遗留系统改造之旅中&#xff0c;使用**绞杀者模式**来改造一个巨大的单体服务&#xff0c;是一种被广泛采用且验证行之有效的手段&#xff0c;在应用传统的绞杀者模式时&#xff0c;通常采用逐步替换的方式&#xff0c;将遗留系统中某一独…

b站pink老师JavaScript的ES6面向对象课程中:正则表达式案例代码——表单验证

目标效果&#xff1a; 1.当输入的手机号&#xff0c;QQ号&#xff0c;昵称&#xff0c;短信验证码&#xff0c;登录密码&#xff0c;确认密码&#xff1a;如果符合标准&#xff0c;就提示正确的文字;如不符合标准&#xff0c;则提示不正确。 2.判断确认密码是否与登录密码相等…