c++ - Recv方法使用

标签 c++ windows sockets networking

我正在制作一款多人游戏,但我在接收函数(或发送函数,不确定)方面遇到问题。

服务器端代码:

        char* UserName = new char[256];
        ZeroMemory(UserName,256);
        recv(sConnect,UserName,256,0);

        char* Password = new char[256];
        ZeroMemory(Password,256);
        recv(sConnect,Password,256,0);


        users[ ++usercount ] = new Client(UserName,Password,sConnect);

        if( users[usercount] ->GetLogInSuccesful() )
        {
            if( send(sConnect,"0x0001",6,0) == 0)
                 cout << "THIS IS **** UP";
        }
        else
        {
            usercount--;
            send(sConnect,"0x0002",6,0);
        }

客户端代码:

        send(server->getsConnect(),User,256,0); // works
        send(server->getsConnect(),Pass,256,0); // works
        char* Response = new char[6];
        ZeroMemory(Response,6);
        recv(server->getsConnect(),Response,6,0); // gets stuck here.

我可能是瞎子,不知道错误在哪里,但是两个小时后就厌倦了看它。如果有人能指出我正确的方向,那就太好了。

根据评论进行编辑:

我已经检查了发送功能(还编辑了代码),控制台保持干净,因此发送功能正常工作。

奇怪的是,当我第一次添加 if 时我忘记了 { } 并且它进入了 else 中。客户端接收用于第二次发送(send(sConnect,"0x0002",6,0);)

因回答而编辑

在客户端构造函数中,用户名和密码都会被检查,因此服务器端的接收和客户端的发送都可以完美工作。

这只是服务器端第一次发送的内容,因为第二次发送有效。

根据评论和答案进行编辑#2

由于雷米的回答,我实际上发现我的客户端构造函数中有一个错误,并且我修复了它。现在发送的两个分支都不起作用:)。

这基本上是游戏的登录,客户端输入用户名和密码并将其发送到服务器。然后根据密码和用户名是否正确来创建一个用户。 GetLogInSuccesful 只是从客户端函数返回一个 bool 值,告诉我密码和用户名是否正确。

因求解而编辑

看起来有一个线程使用了recv函数,并且发送被另一个recv接收了...我讨厌这种愚蠢的错误。感谢所有的帮助和建议!

最佳答案

您假设 recv 一次返回所有字节。它也可以合法地只返回一个字节。请引用this answer有关问题的更完整描述。

这个问题困扰着所有 TCP 初学者。

关于c++ - Recv方法使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452509/

相关文章:

c - 使用 Select 的套接字客户端

c++ - null shared_ptr 可以访问成员函数

C++ API 设计 : is using void* a bad idea?

c++ - 从核心转储中获取正在使用的内存

android - 无法使用 PhoneGap 2.2 创建新的 Android 项目

sockets - 如何从vbscript连接到Socket

c - 如何控制UDP套接字的吞吐量?

c++ - 如何覆盖 GCC 的配置以进行包含搜索?

c - 停止退格形式删除某些输出

windows - php.ini 在哪里?