//TCP监听线程
UINT _ListenTcpThread(LPVOID lparam)
{
CzkDlg *pDlg=(CzkDlg *)lparam;
//初始化Winscok
if (!AfxSocketInit())
{
AfxMessageBox(L"IDP_SOCKETS_INIT_FAILED");
return 1;
}
m_exit = false;
CSocket aSocket, serverSocket;
//最好不要使用aSocket.Create创建,因为容易会出现10048错误
if (!aSocket.Socket())
{
char szError[256] = {0};
sprintf(szError, "Create Faild: %d", GetLastError());
AfxMessageBox(L"Create Faild");
return 1;
}
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
//设置Socket的选项, 解决10048错误必须的步骤
aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
//绑定端口
if (!aSocket.Bind(5000))
{
char szError[256] ={0};
sprintf(szError, "Bind Faild: %d", GetLastError());
AfxMessageBox(L"Bind Faild");
return 1;
}
//监听
if(!aSocket.Listen(10))
{
char szError[256] ={0};
sprintf(szError, "Listen Faild: %d", GetLastError());
AfxMessageBox(L"Listen Faild");
return 1;
}
while(!m_exit)
{
//接收外部连接
if(!aSocket.Accept(serverSocket))
{
continue;
}
else
{
//char szRecvMsg[256] ={0};
//char szOutMsg[256] = {0};
//接收客户端内容:阻塞
//---------------------------------------------------------
//serverSocket.Receive(szRecvMsg, 256);
//---------------------------------------------------------
//发送内容给客户端
serverSocket.Send("Have Receive The Msg", 50);
//关闭
serverSocket.Close();
}
}
//关闭
aSocket.Close();
serverSocket.Close();
return 0;
}
|