if (!HostSocket.Create(BINDPORT))
{
theView->OutputMessage(L"创建HostSocket失败");
}
HostSocket.Listen();
while (!isExit)
{
theView->OutputMessage(_T("手持端已就绪!"));
CSocket ClientSocket;
HostSocket.Accept(ClientSocket);
//CMySocket* lpMySocket=(CMySocket*)lpParameter;
CSocketFile FileSocket(&ClientSocket);
CArchive LoadArchive(&FileSocket,CArchive::load);
CRequestCommand* com=NULL;
com=(CRequestCommand*)LoadArchive.ReadObject(RUNTIME_CLASS(CRequestCommand));
LoadArchive.Close();
if (com)
{
int command=com->m_iCommand;
switch(command){
case GETPARTINFOMATION:
{
break;
}
case GETPARTSINFOMATION:
{
break;
}
case GETSTAFFID:
{
CCardInfo* ccf=new CCardInfo;
CRFIDControl cc;
cc.MESAX_ReadEPC(ccf);
if (!(STAFFCARD==ccf->GetCardType()))
ccf->SetOperSuccess(false);
CArchive StoreArchive(&FileSocket,CArchive::store);
StoreArchive.WriteObject(ccf);
StoreArchive.Flush();
delete ccf;
StoreArchive.Close();
FileSocket.Close();
}
break;
default:
break;
}
}else
theView->OutputMessage(L"未接收到指令");
ClientSocket.Close();
}
HostSocket.Close();
WSACleanup();
return 1;
即当处理第二次请求时,程序就在第11行Accept那崩溃了。另外,本来想把每一个请求放在一个新线程里处理的,但是这样会出错,出错的位值在利用CSocketFile生成CArchive的那一句,如CArchive LoadArchive(&FileSocket,CArchive::load);//这句放在子线程中会出错。请大家指教,谢谢!!
4 个解决方案
#1
最好再分配一个 ClientSocket ,不是用原来的,这有很多socket源码,你参考一下吧:
http://download.csdn.net/detail/geoff08zhang/4571358
http://download.csdn.net/detail/geoff08zhang/4571358
#2
if (!HostSocket.Create(BINDPORT))
{
theView->OutputMessage(L"创建HostSocket失败");
return; //增加这一行,结束函数
}
上面这样试一下,可能是你第二次创建socket是失败的
另外,你socket服务用完后,有没有closesocket
{
theView->OutputMessage(L"创建HostSocket失败");
return; //增加这一行,结束函数
}
上面这样试一下,可能是你第二次创建socket是失败的
另外,你socket服务用完后,有没有closesocket
#3
这样用过了,写了个CSocket的子类,直接调用listen()后,退出。但是这样通信会出现问题,服务器在OnSend()里面发送数据,接着close().客户端接收完数据也close()。结果就是程序卡死了,客户端下次连接也连接不上
#4
好的,我先看看。谢谢
#1
最好再分配一个 ClientSocket ,不是用原来的,这有很多socket源码,你参考一下吧:
http://download.csdn.net/detail/geoff08zhang/4571358
http://download.csdn.net/detail/geoff08zhang/4571358
#2
if (!HostSocket.Create(BINDPORT))
{
theView->OutputMessage(L"创建HostSocket失败");
return; //增加这一行,结束函数
}
上面这样试一下,可能是你第二次创建socket是失败的
另外,你socket服务用完后,有没有closesocket
{
theView->OutputMessage(L"创建HostSocket失败");
return; //增加这一行,结束函数
}
上面这样试一下,可能是你第二次创建socket是失败的
另外,你socket服务用完后,有没有closesocket
#3
这样用过了,写了个CSocket的子类,直接调用listen()后,退出。但是这样通信会出现问题,服务器在OnSend()里面发送数据,接着close().客户端接收完数据也close()。结果就是程序卡死了,客户端下次连接也连接不上
#4
好的,我先看看。谢谢