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

相关推荐
hz567892 小时前
涉密视频会议设备配置指南:终端、音视频采集与配套设施选型
服务器·网络·数据库·安全·实时音视频·信息与通信·智能硬件
广州浮点FLOATLIC3 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
优橙教育3 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
IT研究所3 小时前
AI-ITR平台如何减少客户问题反复升级?
大数据·运维·人工智能·低代码·自然语言处理·安全架构·企微
BLUcoding3 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK3 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil2083 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)3 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障
mounter6253 小时前
从硬件互连到操作系统变革:CXL 技术演进与 Linux 内核工程挑战
linux·运维·服务器
zhengqweasd3 小时前
机房托管服务器怎么选硬盘,机械盘和 SSD 托管场景差异
运维·服务器·github