WinSock C++控制台应用程序即时消息回复不会阻止
WinSock C++ Console App Instant Messanger recv doesn't block
我有一个关于WinSock库的问题。我正在尝试写一个简单的即时消息程序。我只为两个客户端写了它,现在我想改进它,这样它可以为其中的许多客户端工作,每个客户端都会向服务器发送一条消息,其中包含它的编号和将接收消息的客户端的编号。
我遇到了一个问题,我想不通,为什么这么简单的事情不起作用:
发送消息的客户端功能的代码:
void cClientIO::GetID(SOCKET & socket)
{
u_long iMode = 0;
ioctlsocket(socket, FIONBIO, &iMode);
cout << "Type your ID:" << endl;
cin >> buffer;
send(socket, buffer, sizeof(buffer), 0);
cout << "Type reciever ID" << endl;
cin >> buffer;
//We send buffer to the server;
send(socket,buffer,sizeof(buffer), 0);
}
//Here is the server side:
void cRunServer::GetClientInfo(SOCKET & s){
char buffer[256];
int iResult;
//BLOKUJ pls
u_long iMode = 0;
iResult = ioctlsocket(s, FIONBIO, &iMode);
recv(s, buffer, sizeof(buffer), 0);
cout << "Client number: " << buffer << WSAGetLastError() << endl;
iResult = ioctlsocket(s, FIONBIO, &iMode);
recv(s, buffer, sizeof(buffer), 0);
cout << "Attempts to connect to client ID: " << WSAGetLastError() << endl;
}
我不知道发生了什么。。。第一个recv阻止了我的代码,但第二个没有,只是继续。。。我尝试使用GetWSALastError(),但它一直给我0。。。
感谢您提前提供帮助。
它不起作用,因为缓冲区的大小不匹配。客户端正在发送char[2048],而我只接收char[256],第二个调用获取缓冲区的其余部分,这就是它继续流动的原因。
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- 错误 = 0x801F0020筛选器回复消息'error_flt_no_waiter_for_reply'微筛选器驱动程序
- 回复:等待完整消息(可变大小消息,线程)
- ZMQ等待消息,让客户端等待回复
- WinSock C++控制台应用程序即时消息回复不会阻止
- IBM MQ - WMQ C++ 获取请求的消息 ID 并将其设置为回复的相关 ID