unsigned int StartServer(LPVOID lParam)
{
//初始化Winscok
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return 1;
}
m_exit = false;
CServerDlg *aDlg = (CServerDlg *)lParam;
CString strPort;
aDlg->GetDlgItemText(IDC_EDIT_PORT, strPort);
UINT nPort = atoi(strPort);
//socket------------------------------------------------
CSocket aSocket, serverSocket;
//最好不要使用aSocket.Create创建,因为容易会出现10048错误
if (!aSocket.Socket())
{
char szError[256] = {0};
sprintf(szError, "Create Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
BOOL bOptVal = TRUE;
int bOptLen = sizeof(BOOL);
//设置Socket的选项, 解决10048错误必须的步骤
aSocket.SetSockOpt(SO_REUSEADDR, (void *)&bOptVal, bOptLen, SOL_SOCKET);
//监听
if(!aSocket.Listen(10))
{
char szError[256] = {0};
sprintf(szError, "Listen Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
CString strText;
aDlg->GetDlgItemText(IDC_EDIT_LOG, strText);
strText += "Server Start! ";
aDlg->SetDlgItemText(IDC_EDIT_LOG, strText);
while(!m_exit)
{
//接收外部连接
if(!aSocket.Accept(serverSocket))
{
continue;
}
else
{
char szRecvMsg[256] = {0};
char szOutMsg[256] = {0};
//接收客户端内容:阻塞
serverSocket.Receive(szRecvMsg, 256);
sprintf(szOutMsg, "Receive Msg: %s ", szRecvMsg);
aDlg->GetDlgItemText(IDC_EDIT_LOG, strText);
strText += szOutMsg;
aDlg->SetDlgItemText(IDC_EDIT_LOG, strText);
//发送内容给客户端
serverSocket.Send("Have Receive The Msg", 50);
//关闭
serverSocket.Close();
}
}
//关闭
aSocket.Close();
serverSocket.Close();
aDlg->GetDlgItemText(IDC_EDIT_LOG, strText);
strText += "Have Close!";
aDlg->SetDlgItemText(IDC_EDIT_LOG, strText);
return 0;
}
//绑定端口
if (!aSocket.Bind(nPort))
{
char szError[256] = {0};
sprintf(szError, "Bind Faild: %d", GetLastError());
AfxMessageBox(szError);
return 1;
}
Csocket 服务器端
最新推荐文章于 2022-04-20 23:31:26 发布