程序可以正常运行,并且也可以正常持续的发送数据,但是断开客服端连接或者直接关闭服务端界面,就会立即出现下面断言389错误。
用 VS2010 MFC 套接字SOCKET 在编写TCP/IP通信传输的时候,会出现389出错,请问怎么改正?
请问是不是因为关闭监听或者客服端出现了异常?
如图错误:
程序如下:
UINT StartServer(LPVOID lParam)//监听,连接部分的线程
{
if(!YNThread)
{
pThread=NULL;
YNThread=false;
}
else{
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return 1;
}
CGxSingleCamMonoDlg *aDlg = (CGxSingleCamMonoDlg *)lParam;
UINT nPort = 9000;
//socket------------------------------------------------
if (!aSocket.Socket())
{
return 1;
}
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
if (!aSocket.Bind(nPort))
{
return 1;
}
if(!aSocket.Listen(10))
{
char szError[256] = {0};
return 1;
}
if(!aSocket.Accept(serverSocket))
{
m_exit = 1;
return 1;
}
if( m_exit==1)
{
serverSocket.Close();//关闭客服端
aSocket.Close();//关闭监听
}
}
return 0;
}
//发送for循环里面的
UINT XYshow(LPVOID lParam)//坐标数据显示,该线程在整个工程文件的一个回调函数里面被调用,谢谢
{
int m=0,n=0;
for(int i=8;i<10;i++)
{
for(int j=8;j<10;j++)
{
m=i;
n=j;
::SetDlgItemInt(AfxGetApp()->m_pMainWnd->m_hWnd,IDC_OX,j,false);//数据显示在界面
::SetDlgItemInt(AfxGetApp()->m_pMainWnd->m_hWnd,IDC_OY,i,false);
OXX=m;
OYY=n;
if( m_exit = true)
{
CString strX;
strX.Format("%d",OXX);
CString strY;
strY.Format("%d",OYY);
CString s1,sText1=_T("1");
s1 = sText1+" "+strX+" "+strY+"\r\n";
if(serverSocket.Send(s1,s1.GetLength())==SOCKET_ERROR)//发送数据
{
serverSocket.Close();
::AfxMessageBox("数据发送失败!");
return 0;
}
}
Sleep(3000);
}
}
return 0;
}