Linux之socket编程(三)

聊天室

构建描述client的类对象

InetAddr就是sockaddr_in的 C++ 包装,帮你封装字节序转换、字符串 IP 和网络整数 IP 的互转,上层业务不用反复写htons/ntohs/inet_ntoa

用户可能传进来ip和port

也有可能传进来套接字地址结构体sockaddr_in

sockaddr_in

ip和port

接下来修改一下之前的代码

填充网络信息

绑定网络信息,新增_len成员变量

cpp 复制代码
void Init()
    { // 1.创建socket,打开网络文件---本质就是打开网卡
        _sockfd = socket(AF_INET, SOCK_DGRAM, 0);
        if (_sockfd < 0)
        {
            exit(10);
        }
        cout << "打开网络文件成功" << endl;
        LOG(LogLevel::INFO) << "create socket success,sockfd:" << _sockfd;

        // 2.填充网络信息

        InetAddr local(_port);
     
        // 3.bind socket信息
        int n = bind(_sockfd, (struct sockaddr *)local.GetNetAddrress(), local.GetLen());

        // int n = bind(_sockfd, (struct sockaddr *)&local, sizeof(local));
        if (n < 0)
        {
            LOG(LogLevel::FATAL) << "bind socket error";
            exit(9);
        }
        else
        {
            LOG(LogLevel::INFO) << "bind socket success " << " port:" << _port;
        }
    }

管理client

为了便于管理我们在InetAddr里面重载==

searchuser
adduser

deluser

modify

消息转发

Breadcase

为了获得用户顺序表在Usermanage里面要有接口给我们返回该顺序表

CheckUser

实现检查用户时否为第一次发消息,如果是第一次就加入

OffLineUser

服务端

上面两个内容都不是服务端应该要实现的,我们要用回调函数的方法来解决

相应的回调函数的方法传入,并且初始化

start实现调用

server

相关推荐
浅念-16 分钟前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
日常筹谋记20 分钟前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯
susplus1 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)1 小时前
Linux进阶知识1.0
linux·运维·服务器
>Andre<1 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
用户0510122572962 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地2 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.2 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
GeW2 小时前
工作忙.基础弱,也能快速拿RHCE?这套方法亲测有效
linux
Wang's Blog2 小时前
Java 接入Redis: 使用Jedis操作Redis
java·服务器·redis