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

相关推荐
wefg115 小时前
【Docker】基本指令
运维·docker·容器
日常筹谋记15 小时前
数据中心逆变设备运维|通讯对接、动环接入与多系统联动方案科普
运维·网络
强哥聊算力15 小时前
《算力江湖·Intel帝国往事》第三集:安迪·格鲁夫的铁血时代:Intel为什么能把对手逼到墙角?
运维·人工智能·科技·算法·ai·gpu算力
YYRAN_ZZU15 小时前
FlameGraph 火焰图介绍和使用
linux·嵌入式硬件
正在走向自律15 小时前
Linux 服务器部署 DeepSeek 大模型完全指南(2026 版)
linux·运维·服务器·deepseek·部署deepseek·安装ollama·配置api服务
mosaicwang15 小时前
使用XSHELL的ssh隧道/代理连接服务器
运维·xshell·ssh隧道
JoyCong199816 小时前
ToDesk鸿蒙PC端又焕新!远控更稳、操作更准,跨端办公如本地
运维·华为·智能手机·harmonyos·远程工作
KeyAction666616 小时前
从西班牙高铁追尾看安全系统设计:当违规指令成为输入,防护逻辑如何兜底
运维·服务器·安全
夜雪一千16 小时前
Linux 管道、重定向命令介绍
linux·运维·chrome
江华森16 小时前
数据中心网络技术基础 —— 从原理到实操
linux·运维