网络编程(3/4)

广播  

​
#include<myhead.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(6789);
    cin.sin_addr.s_addr = inet_addr("192.168.125.255");

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

        //发送到广播地址中
        sendto(sfd, sbuf, sizeof(sbuf), 0, (struct sockaddr*)&cin, sizeof(cin));
        printf("发送成功\n");
    }
    

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

    return 0;
}

​
#include<myhead.h>

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

    //2、填充地址信息结构体
    struct sockaddr_in rin;
    rin.sin_family = AF_INET;
    rin.sin_port = htons(6789);       //端口号
    rin.sin_addr.s_addr = inet_addr("192.168.125.255"); //广播地址

    //3、绑定
    if(bind(rfd, (struct sockaddr*)&rin, sizeof(rin)) == -1)
    {
        perror("bind error");
        return -1;
    }

    //4、接收消息
    char rbuf[128] = "";
    while(1)
    {
        //清空数组
        bzero(rbuf , sizeof(rbuf));

        //接收消息
        recvfrom(rfd, rbuf, sizeof(rbuf), 0, 0, 0);

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

    //5、关闭套接字
    close(rfd);

    return 0;
}

组播

#include<myhead.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、绑定  非必须
    
    //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、发送消息
    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");
    }

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

流式域套接字

#include<myhead.h>

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    //int sfd = socket(AF_UNIX, SOCK_RAW, IPPROTO_TCP);
    if(sfd == -1)
    {
        perror("socket 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;
    }
    printf("bind success\n");

    //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]: %s\n", cun.sun_path ,buf);

    }

    //7、关闭套接字
    close(newfd);
    close(sfd);


    return 0;
}
#include<myhead.h>

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    //int sfd = socket(AF_UNIX, SOCK_RAW, IPPROTO_TCP);
    if(sfd == -1)
    {
        perror("socket 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;
    }
    printf("bind success\n");

    //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]: %s\n", cun.sun_path ,buf);

    }

    //7、关闭套接字
    close(newfd);
    close(sfd);


    return 0;
}

报式域套接字

#include<myhead.h>

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    //int sfd = socket(AF_UNIX, SOCK_RAW, IPPROTO_TCP);
    if(sfd == -1)
    {
        perror("socket 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;
    }
    printf("bind success\n");

    //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]: %s\n", cun.sun_path ,buf);

    }

    //7、关闭套接字
    close(newfd);
    close(sfd);


    return 0;
}
#include<myhead.h>

int main(int argc, const char *argv[])
{
    //1、创建套接字
    int sfd = socket(AF_UNIX, SOCK_STREAM, 0);
    //int sfd = socket(AF_UNIX, SOCK_RAW, IPPROTO_TCP);
    if(sfd == -1)
    {
        perror("socket 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;
    }
    printf("bind success\n");

    //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]: %s\n", cun.sun_path ,buf);

    }

    //7、关闭套接字
    close(newfd);
    close(sfd);


    return 0;
}

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

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

相关文章

docker部署前后端分离项目

docker部署前后端分离项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1a; Cen…

如何给Vue项目配置好一个nginx.conf文件?

如何给Vue项目配置好一个nginx.conf文件&#xff1f; 一般前端项目中&#xff0c;会有一个docker/nginx/nginx.conf文件&#xff0c;用于配置DockerFile配置等。 那么&#xff0c;如何给项目写好一个nginx.conf文件&#xff0c;以DockerFile为例&#xff1a; # 使用 Node.js …

【LeetCode】并查集OJ

目录 1.省份数量 2. 等式方程的可满足性 1.省份数量 题目地址&#xff1a; 547. 省份数量 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a;对于该题我们直接使用并查集&#xff0c;将可以直接的城市都归类一个集合&#xff0c;最后统计数组中集合的总数就是…

Qt入门(一)Qt概述

Qt是什么&#xff1f; Qt是一个跨平台应用开发框架。 Qt既包括了一系列的Qt库&#xff0c;还包括诸多配套的开发工具如QtCreater&#xff0c;GUI Designer。Qt本身是由C开发的&#xff0c;但是也提供了其他编程语言的接口。 Qt的定位以及同类 学一种技术&#xff0c;最重要的是…

WordPress建站入门教程:忘记数据库名称、用户名和密码了怎么办?

有时候我们需要进入phpMyAdmin管理一些数据库&#xff0c;但是登录phpMyAdmin时却需要我们输入数据库的用户名和密码&#xff0c;但是我们不记得了应该怎么办呢&#xff1f; 其实&#xff0c;我们只需要进入WordPress网站根目录找到并打开wp-config.php文件&#xff0c;就可以…

FPGA- RGB_TFT显示屏原理及驱动逻辑

下图是TFT显示屏的显示效果 该显示屏共分为 2 个版本&#xff0c;4.3 寸版本的 TFT4.3’’_V3.0 和 5.0 寸版本的 TFT5.0’’_V3.0。 两者 PCB 背板电路完全相同&#xff0c;接口脚位定义完全相同&#xff0c;接口时序完全相同&#xff0c;仅使用的显示屏 模组尺寸不同。设计两…

多线程相关面试题(2024大厂高频面试题系列)

1、聊一下并行和并发有什么区别&#xff1f; 并发是同一时间应对多件事情的能力&#xff0c;多个线程轮流使用一个或多个CPU 并行是同一时间动手做多件事情的能力&#xff0c;4核CPU同时执行4个线程 2、说一下线程和进程的区别&#xff1f; 进程是正在运行程序的实例&#xff…

【Linux】常见指令1(ls指令、pwd指令、cd指令、touch指令、mkdir指令、rmdir指令、man指令、cp指令、mv指令、cat指令)

目录 01.ls指令与ll指令 02.pwd指令 03.cd指令 04.touch指令 05.mkdir指令 06.rmdir指令&&rm指令 07.man指令 08.cp指令 09.mv指令 10.cat指令 01.ls指令与ll指令 ls指令&#xff1a; 原型&#xff1a;list directory contents 语法&#xff1a;ls[选项][目录…

于建筑外窗遮阳系数测试的太阳光模拟器模拟太阳光照射房屋视频

太阳光模拟器是一种用于测试建筑外窗遮阳系数的高科技设备。它能够模拟太阳光照射房屋的情景&#xff0c;帮助建筑师和设计师更好地了解建筑外窗的遮阳性能&#xff0c;从而提高建筑的能源效率和舒适度。 这种模拟器的工作原理非常简单&#xff0c;它通过使用高亮度的光源和精密…

【音视频开发好书推荐】RTC程序设计:实时音视频权威指南

目录 1、WebRTC概述2、好书推荐3、本书内容4、本书特色5、作者简介6、谁适合看这本书 1、WebRTC概述 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个由Google发起的实时音视频通讯C开源库&#xff0c;其提供了音视频采集、编码、网络传输&#xff0c;解码显…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

集成算法(随机森林,AdaBoost,Xgboost,Stacking模型)

目录 一、前言 二、Bagging模型 三、Boosting模型 四、Stacking模型 五、总结 一、前言 集成算法&#xff08;Enseamable learning&#xff09; 集成算法一般考虑树模型&#xff0c;KNN就不太适合 目的&#xff1a;让机器学习效果更好&#xff0c;单个不好&#xff0c;一起…

【力扣白嫖日记】626.换座位

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 626.换座位 表&#xff1a;Seat 列名类型idintstudentvarchar id 是该表的主键&#xff08;唯一值&#xf…

Golang各版本的GC详解

go v1.3的标记清除法 清除的第一步&#xff1a;stw将可达对象标记删除未被标记对象 go v1.5三色标记法 从根节点出发&#xff0c;将下一个节点遍历为灰色&#xff0c;放入灰色集合中遍历灰色节点集合&#xff0c;把灰色能到达的节点标记为灰色&#xff0c;把自身标记为黑色&a…

UniSA: Unified Generative Framework for Sentiment Analysis

文章目录 UniSA&#xff1a;统一的情感分析生成框架文章信息研究目的研究内容研究方法1.总体架构图2.基准数据集SAEval3.Task-Specific Prompt4.Modal Mask Training5.Pre-training Tasks5.1Mask Context Modeling5.2Sentiment Polarity Prediction5.3Coarse-grained Label Con…

latex使用\rm将部分公式或者部分单词设置为正体

在LaTeX中&#xff0c;\rm 是用于设置文字为 “Roman” 字体的命令。这里的 “Roman” 字体通常指的是默认的文本字体&#xff0c;也就是没有特意设置为斜体或粗体的普通字体。然而&#xff0c;\rm 并不总是表示特定的字体样式&#xff0c;而是依赖于当前文档或环境的设置。 在…

TIA博途中安装和更新HSP硬件支持包的具体方法示例

TIA博途中安装和更新HSP硬件支持包的具体方法示例 下面介绍2种方法,大家可根据自己实际的情况来选择适合自己的方法。 方法1: 参考以下链接中的内容: 如何TIA博途中更新HSP硬件目录? 方法2:

力扣515. 在每个树行中找最大值(BFS,DFS)

Problem: 515. 在每个树行中找最大值 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1&#xff1a;BFS 套用BFS模板&#xff0c;直接在遍历树的某一层时将当前层的最大值存入数组中 思路2&#xff1a;DFS 回溯思想&#xff0c;在递归时不断更新可选列表&#xff08;根据…

(C语言)深入理解指针2之野指针与传值与传址与assert断言

&#xff08;C语言&#xff09;深入理解指针1基础&#xff1a;http://t.csdnimg.cn/iGA3V 前面我们了解了指针的一些基础知识&#xff0c;下面我们进行进一步的指针学习 目录 1. 野指针 6.1 野指针成因 1. 指针未初始化 2. 指针越界访问 3. 指针指向的空间释放 6.2 如何…

基于JavaWEB SpringBoot婚纱影楼摄影预约网站设计和实现

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…
最新文章