积极答复者
用 VS2010 MFC 套接字SOCKET 在编写TCP/IP通信传输的时候,关闭应用程序或者断开客服端总是会出现389出错,请问怎么修改?

问题
-
程序可以正常运行,并且也可以正常持续的发送数据,但是断开客服端连接或者直接关闭服务端界面,就会立即出现下面断言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;
}
答案
-
Hi MV_C584,
感谢在MSDN论坛发帖。
一般情况下我们不直接调用close函数。析构函数在销毁archive, socket file, 和socket objects时,会调用Close 函数。
关于更多socket使用技巧和示例,请参考以下文档。
https://msdn.microsoft.com/en-us/library/09dd1ycd.aspx
Best Regards,
Sera Yu
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
全部回复
-
Hi MV_C584,
感谢在MSDN论坛发帖。
一般情况下我们不直接调用close函数。析构函数在销毁archive, socket file, 和socket objects时,会调用Close 函数。
关于更多socket使用技巧和示例,请参考以下文档。
https://msdn.microsoft.com/en-us/library/09dd1ycd.aspx
Best Regards,
Sera Yu
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.