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

weixin_38053856 2016-08-27 11:15:42

程序可以正常运行,并且也可以正常持续的发送数据,但是断开客服端连接或者直接关闭服务端界面,就会立即出现下面断言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;
}
...全文
23 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧