用多线程,服务器端一个服务器侦听CSocket对象,和多个线程(每个线程里有一个用来与客户端联接的CSocket对象)。

解决方案 »

  1.   

    用listen(XXX) XXX指允许的连接数
    然后用循环Accept
      

  2.   

    用1个Socket来Listen,用不新的Socket来Accept
      

  3.   

    用1个Socket来Listen,用新的Socket来Accept
      

  4.   

    listen(xxx)
    xxx用来设定请求队列中允许的最大请求数,如果我的请求数大于xxx那么连接就失败了阿。这怎么解决?
      

  5.   

    listen中的数字是堆栈中的大小,也就是说连接还没有建立起来.
    你可以用另外一个进程去接收请求,这样你建立起几万个请求都没有问题.
      

  6.   

    注:listen(xxx)中的数字不是最大连接数,是最大未处理请求数
      

  7.   

    list(x)指定等待连接的最大数,也就是还没有被accept的连接数,一般指定为5就足够了。要想一个服务端接受多个客户连接,只要把accept到的连接用一个新的线程来处理就可以了
      

  8.   

    listen和accept必须使用同一个socket
      

  9.   

    TO : solar(int argc,char**argv) 
    想一个服务端接受多个客户连接,只要把accept到的连接用一个新的线程来处理就可以了?
    可以具体说说么?
    例如:
    服务端:
    csocket srvsocket;
    csocker licsocket[5];
    srvsocket.create(2000);
    srvsocket.listen(5);
    客户端1:
    csocket cltsocket;
    cltsocket.create();
    cltsocket.connet("mike",2000);
    服务端
    onAccept()函数
    srvsocket.accept(licsocket[0]);
    客户端2:
    csocket cltsocket;
    cltsocket.create();
    cltsocket.connet("mike",2000);
    服务端
    onAccept()函数
    srvsocket.accept(licsocket[1]);
    .............
    .............
    服务端
    onAccept()函数
    srvsocket.accept(licsocket[4]);
    也就是说在一个线程里一个端口(2000)可以和5个客户端连接?
    如果要更多的就要建立新的线程?
      

  10.   

    to solar(int argc,char**argv) 
    看了你头顶上的问题了么?帮帮忙,谢谢
      

  11.   

    服务端:const int max_listen_queue=5;csocket srvsocket;
    csocker licsocket;
    srvsocket.create(2000);
    srvsocket.listen(max_listen_queue);
    客户端1:
    csocket cltsocket;
    cltsocket.create();
    cltsocket.connet("mike",2000);
    服务端
    onAccept()函数
    srvsocket.accept(licsocket);
    AfxBeginThread(do_service,(LPVOID *)listensocket);线程:
    UINT do_service( LPVOID pParam )
    {
      CSocket sock=CSocket(pParam);
      
      // do  you work here
      
    }
    }
      

  12.   

    如果我在服务端建立个大的数组
    csocker licsocket[100];
    而不是
    csocker licsocket[5];
    那么不就可以连接多个客户端socket了么?还用启用新的线程么?
    还有,服务端新accept的socket的输出/入端口用的是2000,那么多个socket输入/输出可以同时用2000么?
      

  13.   

    服务端accept(licsocket[index]);licsocket具有和licsocket[index]);相同的特性,那么licsocket占用的端口号也应是2000,如此不断accept(licsocket[index]));licsocket[index]都是绑定在2000上,这样可以么?
    我不明白??不明白?
    既然,服务端已经Accept()成功了,那么为什么不在主线程中直接用他,还要新启动一个线程???这是为什么????
    solar(int argc,char**argv) 
    能告诉我么???谢谢了。
      

  14.   


    服务端accept(licsocket[index]);licsocket具有和licsocket[index];相同的特性,那么licsocket[index]占用的端口号也应是2000,如此不断accept(licsocket[index]));licsocket[index]都是绑定在2000上,这样可以么?
    我不明白??不明白?
    既然,服务端已经Accept()成功了,那么为什么不在主线程中直接用他,还要新启动一个线程???这是为什么????
    solar(int argc,char**argv) 
    能告诉我么???谢谢了。
      

  15.   

    线程是用来为客户端服务的
    〉服务端新accept的socket的输出/入端口用的是2000,那么多个socket输入/输出可以同时用2000么?
    你只有一个server,可以的
      

  16.   

    >licsocket[index]都是绑定在2000上,这样可以么?
    可以的。因为客户端的ip和端口互不相同
    >既然,服务端已经Accept()成功了,那么为什么不在主线程中直接用他,还要新启动一个线程???
    主线程还要继续accept;一个线程服务一个客户逻辑简单,互不影响
      

  17.   

    不一定用多线程,我用时钟调度也完成过,但是,这样最多大约只能有80个连接(98),但是我改用多线程后,可以做到10000,
    注意,用时钟的时候只能用CAsyncSocket类,不然你的程序会被阻塞
      

  18.   

    MSDN中有现成的sample,一看便知.
    方法:CSocket->sample
      

  19.   

    有两种方法:
    1. 基于窗口的程序,使用异步Socket。
    2. 没有窗口的程序,使用线程。
      

  20.   

    http://www.csdn.net/expert/topic/549/549539.xml