问题描述:
    我现在要做一个socket的服务器程序,接收很多客户端来的数据,每个客户端设备定时一分钟往服务器发送数据,数据的类型有很多种,服务器上将收到的数据进行组织,保存成一定的格式的文件,客户端的个数没有确定,怎么实现?
我的想法:
    虽然每分钟客户端向服务器传递各种数据,但是数据量很小,我的想法是在服务器上建立一个socket ,各个客户端都和这个socket连接,每连接到一个客户端,就开一个线程 单独处理这个客户端的数据,考虑到客户端必须容易动态加入,且要判断客户端掉线的情况。我这个想法怎么实现呢?谢谢大家。

解决方案 »

  1.   

        在服务器端保存每一个客房端的接连,在保存一个新到的连接前先查询已保存的连接里是否有相同的IP,如果有,就说明先前保存的该IP的客户端已退出或出故障,这是再次连接,这是就需要先删除先前保存的这个IP,然后再保存这个新的连接客户端.
        保存每个连接客户端用类似CObjevtList或CObjectArray就可以,具体是哪个类,你可以查一下,我忘了是哪个类,这个类插入删除追加都非常方便
      

  2.   

    动态加入:用一个vector来保存服务器端与客户端通信的sockets,判断recv的返回值来判断客户端是否断开,若断开erase这个socket就是,当然erase时要注意迭代器失效的情形。
      

  3.   

    一个客户端开一个线程,如果有成千上万个客户端连上来,服务器遍历一遍这些线程还不得累死啊。
    现有可用的非阻塞模型有很多啊,比如客户端较少的话就采用简单的select模型,客户端比较多就采用完成端口。
      

  4.   

    这不就是典型的服务端应用么,如果连接数比较多的话选择完成端口模型是最好的。但是对于新手这个比较难实现。如果你的连接数不是太多,比如不超过1000可以考虑使用select模型,这个很简单。
      

  5.   

    楼主找一些网络的开源C/S模式的代码来研究一下吧
    服务器要接收多个客户端连接,一般不是每个客户端一个处理线程
    而是有专门处理socket的工作线程,和处理接收到的数据的业务处理线程
    至于两种线程的数量,可根据需要确定,一般线程数控制在10个以内就可以满足要求了
      

  6.   

    简单的程序就用 多线程解决咯 
    复杂点就用网络模型咯
    例如IOCP这类型的……
    如果楼主就简单的那么个功能 用多线程就行了-_-
      

  7.   

    保存完断开,就可以了,如果简单的话,客户端组织好数据,用FTP服务器就可以了
      

  8.   


    不能用ftp服务器,我还要对数据进行分析。
      

  9.   


    我的服务器是socket 长连接,不断开的。
      

  10.   


    客户端是3G无线网络,ip地址会变,如何处理
      

  11.   

    你这个开线程方式不行的, 连接太多了, 用完成端口,能你推荐一篇博文,里面也有可用原代码:http://blog.csdn.net/weiqubo/article/details/7091230