线程函数如下:
UINT con_RecvThread(LPVOID pParam)            //集中器接收线程
{
Con_Communication *cThread=(Con_Communication *)pParam;
  int ss;     //实际接收数据长度
int heartbeatflag=0;  //心跳帧应答标志
char controlword=0x00;
int i;
int s_len;
int lencheck;
unsigned char cmd[8]={0};
cmd[0]=0x7E;
cmd[1]=0xB0;
cmd[2]=0x06;
cmd[3]=0x00;
cmd[4]=0x05;
cmd[5]=0x89;
cmd[6]=0x68;
cmd[7]=0x7E; ss = 1;
cThread->Saveline(cmd,8,0);
cThread->c_sockConn=accept(cThread->c_sockSrv,(sockaddr*)&cThread->c_addrSrv,&(cThread->c_addrlen));
CString a=inet_ntoa(cThread->c_addrSrv.sin_addr);
if(cThread->c_sockConn!=INVALID_SOCKET)
{      //开始接收
    unsigned char c_RecvBuff[c_RecvBuffLen] = {0};
while(ss>0)
{   //循环接收数据
memset(c_RecvBuff,'\0',sizeof(c_RecvBuff));
        
ss = recv(cThread->c_sockConn,(char *)c_RecvBuff,c_RecvBuffLen,0);//返回ss为本次实际接收数据长
if(ss<=0) 
{
DWORD dwError = WSAGetLastError();  //查看是那种SOCKET错误导致接收失败
break; }
else
{

//cThread->Saveline(c_RecvBuff,ss,1);
if(c_RecvBuff[1]==0xA0||c_RecvBuff[1]==0xA1)//如果接收的是其他报文,校验并解析
{
cThread->c_TransmitData(ss,c_RecvBuff);
}
else if(c_RecvBuff[1]==0xB0)   //判断是否为心跳帧
{
    int w=0;
w=send(cThread->c_sockConn,(char*)cmd,8,0);//如果接收的是心跳帧,发送应答报文
heartbeatflag++;

if(w==SOCKET_ERROR)
{
AfxMessageBox("数据发送失败");
DWORD dwError1 = WSAGetLastError();

} cThread->c_sendSNRM();

} else
{
} //}
}
}
}
else
{
cThread->CID="集中器连接失败";
} return 0;
}服务器套接字的建立不在线程函数里面,在另一个函数 readpower()里面,如下
readpower()
{
        communication concentrator;
concentrator.c_sockSrv=socket(AF_INET,SOCK_STREAM,0);
if(concentrator.c_sockSrv==INVALID_SOCKET)
{
AfxMessageBox("创建套接字失败");
exit(0);
}

concentrator.c_addrSrv.sin_addr.s_addr=htonl(INADDR_ANY);
concentrator.c_addrSrv.sin_family=AF_INET;
concentrator.c_addrSrv.sin_port=htons(9028); concentrator.c_addrlen=sizeof(concentrator.c_addrSrv);
    if(bind(concentrator.c_sockSrv,(sockaddr*)&concentrator.c_addrSrv,concentrator.c_addrlen)==SOCKET_ERROR)   //正确情况下返回0
{
//连接失败的提示,现在用的是对话框,可以修改
AfxMessageBox("服务器创建失败,请重新启动");
}
else
AfxMessageBox("绑定成功"); listen(concentrator.c_sockSrv,5);         concentratorThread =AfxBeginThread(con_RecvThread, this);   //启动线程函数
/*if(readPowerFlag==1)
{
TerminateThread(concentratorThread,0);
}*/ WaitForEventOver(concentratorThread->m_hThread);  //等待线程结束        L: if(Lflag == 1)  //多次抄读时直接线程了)
{
concentratorThread = AfxBeginThread(con_RecvThread, this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);  //创建线程使其挂起
ppThread=concentratorThread;
int i = SetTimer(NULL,1,8000,(TIMERPROC)setThread);      //定时时间到时启用线程
WaitForEventOver(concentratorThread->m_hThread);   //等待线程结束
}
        Lflag = 1;
goto L;}第一次执行线程时没有问题,当执行goto L ,进入线程时,accept()连接没有问题,当第二次执行ss = recv(cThread->c_sockConn,(char *)c_RecvBuff,c_RecvBuffLen,0);//返回ss为本次实际接收数据长时,出现如下错误,跳出提示框:
con_test Microsoft基础类应用程序 已停止工作。确定后,出现提示框:Debug Assertion Failed! File :wincore.cpp Line:991 ...... 请问各位高手这是什么原因?这个问题应该怎样解决?