问题:C++ Socket通信的时候,第一次客户端可以收到服务器端的消息,第二次收不到,再之后有时候可以收到,有时候收不到,但服务器端有反应
服务器端的内容:
客户端的内容:
服务器端代码:
while (true)
{
int Recv = recv(client_fd,recvBuf,sizeof(recvBuf),0); //接受来自客户端的内容
if (Recv<0)
{
cout<<"Error: Receive info from server failed!"<return -1;
}
cout<<"*********************************"<"查询次数:"<"receive data: "<float> dbData;
dbData=mysql.PrintQueryResXYZ();
int querySize = dbData.size();
mysql.vec2string(dbData,strSendBuf,querySize); //vector转换成string类型
cout<char sendBuf[99999]={0}; //发送 1024
strcpy(sendBuf,strSendBuf.c_str()); //string转换成char[]
cout<<"查询到的数量:"<size()<"发送给客户端的数据..."<int Write = write(client_fd,sendBuf,sizeof(sendBuf));
//int Send = send(client_fd,(char*)sendBuf,sizeof(sendBuf),0); //发送给客户端
if (Write<0)
{
cout << "Error: Send info to server failed !"<return -1;
}
cout<<"给客户端发送完成!"<"*********************************"<

客户端代码:
if (receive > 0)
{
cout << "从服务器端开始接收:" << recvbuf << endl;
while (true)
{
char input[1024] = {0}; //键盘输入的字符
receive = 0;
cout << "发送给服务器端的内容:";
cin.getline(input, 1024); //cin以空格为分隔,输入的字符串中有空格的时候,会被分开
if (!strcmp(input,"exit")) //输入exit直接退出
{
send(Socket, input, sizeof(input), 0);
return 0;
}
int Send = send(Socket, input, sizeof(input), 0);
memset(recvbuf, '\0', sizeof(recvbuf));
//cout << receive << endl;
receive = recv(Socket, recvbuf, sizeof(recvbuf), 0);
if (receive >= 0)
{
cout << "从服务器端接收到的内容:\n" << recvbuf << endl;
}
}
}

第二次查询时候,客户端的代码直接从第45行跳转到了第50行,48行的recv似乎没有执行
1.第二次查询时,服务器端发送的数据可能太长,导致客户端接收到的数据长度不够,从而导致recv函数阻塞。
建议使用recv函数返回的实际接收数据长度作为send函数的参数,以保证数据的完整性。例如:
int Write = write(client_fd, sendBuf, strlen(sendBuf)); // 发送给客户端
2.客户端的代码中,第一个recv函数没有检查返回值是否小于等于0,这可能导致后续的recv函数无法正确执行。建议加上如下的错误处理代码:
if (receive <= 0)
{
cout << "Error: Receive info from server failed!" << endl;
return -1;
}
如果以上修改无法解决问题,请提供更详细的信息,例如程序运行过程中的输出信息,以便更好地定位问题。
那你同时在服务端也调试输出一下,第二次接收到客户端的信息了没?接收到了给客户端发信息了没?
顺藤摸瓜,自己就能找出来了