以前做c/s模式都是客户端和服务端通信,现在多个客户端连接同一个服务端要怎么通信比较好,是要在客户端listen一个socket,当作服务端来和另外一个客户端通信吗?还是所有信息发给服务端再通过服务端中转?客户端使用的socket模型跟服务端使用的模型有没有联系?

解决方案 »

  1.   

    客户端使用的socket模型跟服务端使用的模型没有联系(指的是阻塞或者非阻塞)
    问题1太大了,能否说下你用的什么协议?TCP/UDP?多少个客户端并发连接在服务器上?
      

  2.   

    1,模型是指重叠IO,完成端口==,是否有联系?比如说oicq,要处理大量的socket,应该是用完成端口比较好吧?那么客户端(一人可以有上千个好友,即一个客户端可能跟一千个客户端通信),是否也是用完成端口比较好?这个就是我想知道的服务端和客户端在选用模型上是否有联系。2,比如qq,如果我登录,服务端要通知我的好友,那么这时我要和好友通信,是通过服务端发来的信息(比如ip,端口,好友号码==),然后connect到好友已经listen的socket上,进行通信,是这样的吗?如果是,那就是说好友那边也要维护一组他的“客户端”socket了?3,socket里DETACH和ATACHE是用来干啥的?MSDN看不明白!4,如果问题1 太大,能不能告诉我c/s模式,服务端都要承担哪些作用?
      

  3.   

    1、建议使用完成端口,与客户端的TCP是否阻塞没有关系
    2、客户到客户,出于NAT的考虑,建议使用UDP
    3、Atach和Detach是用来将一个socket句柄和CSocket类分离或者绑定的
    4、C/S模式意味着所有的数据都经过服务器
    呵呵,不知道这样的答复满意么?
      

  4.   

    谢谢楼上答复,所有数据都要经过服务器,那这么说oicq不完全是c/s模式了?因为并不是所有数据都是"通过服务器中转"啊,如果oicq传的文件数据都要经过服务器,那服务器不就爆了!你这么说我倒是开始模糊c/s模式到底指什么,c/s模式客户端就没有listen的socket了?
      

  5.   

    OICQ是P2P模式的
    c/s模式客户端没有listen的socket