关于SOCKET接收数据出错的问题
我做了一个客户端,向服务器端发送数据,然后服务器端处理完后会给客户端回传日志。所以我在一个线程里做了一个死循环来接收数据,服务器端发送数据是这样的:如果数据已经处理完了就发处理完的数据,如果还没处理就发送R#。下面是线程处理函数:
UINT CRightPaneFrame::ReadyProc(LPVOID pParam)
{
CRightPaneFrame* me = (CRightPaneFrame*)pParam;
CStdioFile ExportFile;
ExportFile.Open(m_socket.user+"发送日志.txt",CFile::modeNoTruncate | CFile::modeReadWrite | CFile::modeCreate,NULL);
ExportFile.SeekToEnd();
char recvbuf[1000];
while (1)
{
memset(recvbuf, 0, sizeof(recvbuf));
if (m_socket.Receive(recvbuf,1000,0) == SOCKET_ERROR)
{
CString s;
s.Format("错误信息:%d",WSAGetLastError());
AfxMessageBox(s);
break;
}
if (recvbuf != NULL && recvbuf[0] == 'R')
{
CString recv,status,num,time,content,all;
recv.Format("%s",recvbuf);
if (recv != "R#")
{
int n = recv.Find("R");
recv = recv.Mid(n+1);
int i = recv.Find("#");
num = recv.Left(i);
recv = recv.Mid(i+1);
int j = recv.Find("#");
time = recv.Left(j);
recv = recv.Mid(j+1);
int a = recv.Find("#");
status = recv.Left(a);
content = recv.Mid(a+1);
if (status == "0")
all = time + "#" + num + "#" + "成功" + "#" + content;
else
all = time + "#" + num + "#" + "失败" + "#" + content;
ExportFile.WriteString(all+"\n");
}
else
{
ExportFile.Close();
break;
}
}
}
return 0;
}
可是出错了,我单步跟踪运行,发现第一次循环没问题,而且接收过来的数据也没问题,可是第二次循环的时候整个程序就出错退出了。
是在运行到if (m_socket.Receive(recvbuf,1000,0) == SOCKET_ERROR)这句话的时候出错的。
谁能帮帮我啊,救命啊!