如何用CSocket进行网络编程?如编写聊天室等。用CSocket需要考虑阻塞问题,如何解决?
采用线程如何解决?我用如下线程函数int CStartServer::Run() 
{
// TODO: Add your specialized code here and/or call the base class
CSocket csCSocket,ClientSocket; if(csCSocket.Create(5055,SOCK_STREAM)==0)
return CWinThread::Run(); csCSocket->Listen(1);
csCSocket->Accept(ClientSocket); while(1)
{
char cbBuffer[1000];
memset( cbBuffer, 0, sizeof( cbBuffer ) );
int nBytes =csCSocket->Receive( cbBuffer,sizeof( cbBuffer ) );
}

return CWinThread::Run();
}可是if(csCSocket.Create(5055,SOCK_STREAM)==0)和csCSocket->Accept(ClientSocket);执行出错,编译可以通过。

解决方案 »

  1.   

    if(csCSocket.Create(5055,SOCK_STREAM)==0)
    //////////////////////////////////////////////////
    if(csCSocket.Create(5055,SOCK_STREAM)==-1)www.vckbase.com
      

  2.   

    问题在csCSocket.Create(5055,SOCK_STREAM)和csCSocket->Accept(ClientSocket),可我不知道为何有问题,如果该段程序放在主线程中,调用没错,为什么放在子线程中出错。咋么解决?
      

  3.   

    int nBytes =csCSocket->Receive( cbBuffer,sizeof( cbBuffer ) );
    这句话有问题吧,csCSocket是用来作为server socket用的,它只能Accept,不能接受数据的
    接受数据是clientsocket的事吧
    int nBytes =csCSocket->ClientSocket.Receive( cbBuffer,sizeof( cbBuffer ) );还有楼主的程序肯定编译不过的,错误太明显了
    if(csCSocket.Create(5055,SOCK_STREAM)==0)
    return CWinThread::Run();
    CSocket csCSocket csCSocket->Listen(1);  csCSocket->Accept(ClientSocket);
          csCSocket 是类,啥时候变成CSocket* 类型了,应该写成csCSocket.Listen(1);csCSocket.Accept(ClientSocket); 吧
      

  4.   

    int CStartServer::Run() 
    {
    // TODO: Add your specialized code here and/or call the base class
    CSocket csCSocket,ClientSocket; if(csCSocket.Create(5055,SOCK_STREAM)==0)
    return CWinThread::Run(); csCSocket.Listen(1);
    csCSocket.Accept(ClientSocket); while(1)
    {
    char cbBuffer[1000];
    memset( cbBuffer, 0, sizeof( cbBuffer ) );
    int nBytes =csCSocket.Receive( cbBuffer,sizeof( cbBuffer ) );
    }

    return CWinThread::Run();
    }
      

  5.   

    问题在csCSocket.Create(5055,SOCK_STREAM)和csCSocket->Accept(ClientSocket),可我不知道为何有问题,如果该段程序放在主线程中,调用没错,为什么放在子线程中出错。咋么解决?
      

  6.   

    你的CSocket csCSocket,ClientSocket;两个对象都是局部的对象,run()结束都析构了,连接就断调了。应该建立一个全局对象监听,客户套接字用new分配。另外Create()默认就是创建SOCK_STREAM类型的,没必要传递。