WinSock C++ 控制台应用程序 Instant Messanger recv 不会阻止
WinSock C++ Console App Instant Messanger recv doesn't block
我有一个关于 WinSock 库的问题。
我正在尝试编写简单的即时消息程序。我只为 2 个客户端编写它,现在我想对其进行改进,因此它可以为其中的许多客户端工作,并且每个客户端都会发送一条消息,其中包含其编号和将向服务器接收消息的客户端编号。
我有一个问题,我想不通,为什么这么简单的事情不起作用:
发送消息的客户端函数代码:
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],第二次调用获取缓冲区的其余部分,这就是它继续流动的原因。
我有一个关于 WinSock 库的问题。 我正在尝试编写简单的即时消息程序。我只为 2 个客户端编写它,现在我想对其进行改进,因此它可以为其中的许多客户端工作,并且每个客户端都会发送一条消息,其中包含其编号和将向服务器接收消息的客户端编号。
我有一个问题,我想不通,为什么这么简单的事情不起作用:
发送消息的客户端函数代码:
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],第二次调用获取缓冲区的其余部分,这就是它继续流动的原因。