我先定义一个g_socket绑定他, linsten里面的参数是10然后用WASASYNSELECT和一个WINDOWS消息关联起来在那个消息响应函数里面 当受到消息时 用AfxBeginThread开始一个函数在这个函数里面 accept对方的请求,accept地返回置放在一个大小为10的socket数组里面请问是否这样做我的10个socket就能互不干扰的同时工作了?多谢!

解决方案 »

  1.   

    不能你的端口只有一个,但是同时只能由一个socket操作你的这个端口。如果其中一个socket占用端口,其他的socket就会抛出错误
      

  2.   

    可以.
    一个连接的唯一性由4个值决定:本地IP,本地端口,对方IP,对方端口.
    accept产生的SOCKET连接虽然都是同一个本地IP,本地端口,对方IP,但是对方端口肯定不相同,所以各个连接可以区分,彼此之间不会有影响.
      

  3.   

    linsten里面的参数是10  这里面的10是同时接受的连接数。不是说只接到10个连接就不能再LISTEN
    就算不新开线程,accept的各个连接,也是可以不相互干扰的工作。
      

  4.   

    (多线程的SOCKET接受方法是不是可行的)
      

  5.   

    http://blog.csdn.net/ximenying/archive/2006/08/08/1037519.aspx
      

  6.   

    UINT ServerThreadProc(LPVOID pParam)
    {
    CSockAddr saClient;
    CHttpBlockingSocket sConnect;
    char *request1=new char[1024];
    int nBytesSent = 0;
    CFile* pFile = NULL;
    if(!theApp.m_sListen.Accept(sConnect, saClient)) 
    {
    theApp.m_bListening=FALSE;
    delete request1;
    theApp.m_pView->Invalidate();
    return 0;
    }
    else
    {
    AfxBeginThread(ServerThreadProc,pParam,THREAD_PRIORITY_NORMAL);
    theApp.m_nConnectCount++;
    theApp.m_pView->Invalidate();
    }......//下面是你具体的业务模块,以上代码完成了动态连接很多个客户端
      

  7.   

    这种结构非常好。
    但是你的思路里面有一个概念错误
    listen参数里面的10表示可以同时接受10个tcp请求,这个意思是说当程序来不及处理的时候,可以有10个客户端的请求背保存在队列里面等待处理。而同时处理的socket连接可以达到很多。
    所以你设置一个大小为10的socket数组没有意义,既然在线程里面accept那么直接在线程里用局部变量就行了。