Csocket 服务器端

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
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值