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

相关推荐
秋风&萧瑟23 分钟前
【Linux系统编程】Linux IPC 的使用
linux·运维·网络
DOLA_Tech35 分钟前
WIN电脑中VMware虚拟机网速慢的解决办法
运维·服务器
En^_^Joy1 小时前
Nginx 从入门到精通:配置、原理与实战详解
运维·nginx
玖石书1 小时前
WSL2 手动安装 Ubuntu 24.04 到指定磁盘位置
linux·运维·ubuntu·wsl
库玛西2 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
随便做点啥2 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
薛定谔的悦6 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
2601_962218479 小时前
万象生鲜系统区块链溯源技术帮助生鲜企业搭建食品安全数字化体系
大数据·运维·微服务·云原生·架构
智塑未来9 小时前
中小公司在线文档选型:从协作入口到安全边界
运维·安全