window下socket实现cs模式-简易版-网络信息接受长度问题

– 固长数据:

  1. 我发送的多长的数据每次都是固定的,就这么多这么长
  • 变长数据:
    比如我要发送一个图片,每次的图片大小都不一样,但是发送的格式是相同的
    图片本身数据的长度都不一样,这个时候我们人为的变长数据
    像这样发送的时候我们就要指定我们发送的数据有多长
    而之前DataHeader固长数据这样的方式不明显,只有在数据结构一样但是长度不一样的时候DataHeader才会有作用

代码修改:

  • server
 while (true)
        {
            // 缓冲区(固定长度数据)
            // 把收到的消息放到一个缓冲区里面
            char szRecv[1024] = {}; // 一次性数据来收,每次收的数据保存在缓冲区里面
            int ret = recv(_client_sock, szRecv, sizeof(DataHeader), 0);

            DataHeader* header = (DataHeader*)szRecv;

            if (ret <= 0)
            {
                cout << "client exit...." << endl;
                break;
            }

            // 取得息头
            switch (header->cmd)
            {
            case CMD_LOGIN:
            {
                // 再取剩余的长度,然后在放去对应的包体里面
                // 这里取剩余的长度,把剩余放进对应的消息体里面
                recv(_client_sock, szRecv + sizeof(DataHeader), header->dataLength - sizeof(DataHeader), 0);
                Login* login = (Login*)szRecv;

                cout << "接收数据 : CMD_LOGIN ...."<< ", 数据长度 : " << login->dataLength;
                cout << " : userName = " << login->UserName;
                cout << " : PassWord = " << login->PassWord << endl;

                // LoginResult ret = { CMD_LOGIN };	// 就不能这样初始化了 因为是一个类了
                LoginResult ret;
                send(_client_sock, (char*)&ret, sizeof(LoginResult), 0);
            }
            break;

            case CMD_LOGOUT:
            {
                recv(_client_sock, szRecv + sizeof(DataHeader), header->dataLength - sizeof(DataHeader), 0);
                Logout* logout = (Logout*)szRecv;

                cout << "接收数据 : CMD_LOGOUT ...." << ", 数据长度 : " << logout->dataLength;
                cout << " : userName = " << logout->UserName << endl;;

                LogoutResult ret;
                send(_client_sock, (char*)&ret, sizeof(ret), 0);
            }
            break;

            default:
                DataHeader header = { 0, CMD_ERROR };
                send(_client_sock, (char*)&header, sizeof(DataHeader), 0);
                break;
            }

        }

在这里插入图片描述
-------------------------------- the end ----------------------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值