我对WinSock库有疑问。 我正在尝试编写简单的即时消息程序。我只为2个客户编写了它,现在我想改进它,所以它可以为它们中的许多工作,并且每个客户端都会发送一条消息,其中包含客户端的号码和号码,它将向服务器接收消息。 / p>
我遇到了问题,我无法解释,为什么这么简单的事情不起作用:
发送消息的客户端函数的代码:
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 ...
提前感谢您的帮助。
答案 0 :(得分:0)
它不起作用,因为缓冲区的大小不匹配。客户端发送char [2048],我只收回char [256],第二次调用得到缓冲区的其余部分,这就是为什么它继续流动。