Recv 方法用法
Recv method usage
我正在制作多人游戏,但我对recv功能(或发送功能,不确定)有问题。
服务器端代码:
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.
我可能是瞎子,看不到错误在哪里,但 2 小时后厌倦了看它。如果有人能指出我正确的方向,那就太好了。
因评论而编辑:
我已经检查了发送功能(还编辑了代码),控制台保持干净,因此发送功能工作正常。
Wierd 的事情是,当我第一次添加 如果我忘记了 { } 并且它进入了其他。客户端 recv 为第二次发送工作 ( 发送(sConnect,"0x0002",6,0);
)由于安斯瓦而编辑
在客户端构造函数中,用户名和密码都被选中,因此服务器端的 recv 和客户端的发送都可以完美运行。
这只是关于服务器端第一次发送的事情,因为第二次有效。
由于评论和答案而编辑#2
由于 Remy 的 ansare 我实际上发现我的客户端构造函数中存在一个错误,我修复了它。现在发送的两个撳手都不起作用:)。
这基本上是一个游戏的登录,客户端输入用户名和密码并将它们发送到服务器。然后根据密码和用户名是否正确的事实创建一个使用。GetLogInSuccesful只是从客户端函数返回一个布尔值,告诉我密码和用户名是否正确。
因求解而编辑
看起来有使用recv函数的anthoner线程,并且发送是由另一个recv接收的...我讨厌这种愚蠢的错误。感谢所有的帮助和建议!
您假设recv
一次返回所有字节。它也可以合法地只返回一个字节。有关问题的更完整描述,请参阅此答案。
这个问题困扰着所有TCP初学者。
如果GetLogInSuccessful()
失败,您需要发送响应:
if( ...->GetLogInSuccesful() )
send(sConnect,"0x0001",6,0);
else
send(sConnect,"0x0000",6,0);
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 复制构造函数方法的用法
- 为什么"Warning X4000: use of potentially uninitialized variable"显示多个常用方法的用法?
- 原子类对象方法用法
- Recv 方法用法
- 命名参数习惯用法,使用指向类私有方法的指针
- 获取源代码树中 boost:shared_ptr get 方法的所有用法的列表
- 指针和方法的奇怪用法
- "GetObjectClass"方法和"FindClass"方法的区别和用法