服务器如何 同时 向多个终端传送数据文件,
如果是监听线程的话,他可以一直等待连接,阻塞式接收,这个时候无连接他不工作,只是一个等待的状态。 但是有些地方我没想清楚,比如说同时向两个IP传输数据,怎么才能同时传呢?因为传输线程一旦执行,TCP方式向一个指定的IP发送数据,发完才处理别的事情,难道是说发送一点数据等待一下使用设置windows事件信号或则使用锁,下个线程向别的IP发送吗?听说有一种异步IO方式 WSAOVERLAPPED重载结构 采用哪些方式能够解决TCP协议下的同时向多个终端传输数据呢?希望能够给个思路或则方法,最好有点实例之类的~!谢谢大家!!!当然如果采用UDP协议的话这些问题就可以绕过去!

解决方案 »

  1.   

    关键不是监听后就干活,是服务器发送数据时间是任意的,我创建了多个线程,有专门管理监听的线程,他有其他的任务去做,不针对向终端发送任务.所以监听就干活的思路无法满足功能。不过谢谢你.按队列方式存起来,然后循环发送..
    能说的在详细一些吗?循环发送 不也是队列中取一个IP发数据,结束后再取队列中下一个IP发数据吗?怎么能同时向多个IP发送呢?
    我不太理解您的想法!
      

  2.   

    TCP只能一个一个地发送,可以用多线程,也可以用异步、非阻塞等方式。
      

  3.   

    TCP是要先建立连接才能发送的嘛。那么已经连接进来的客户端自然你服务器会保存起来。只要遍历这个保存的客户端,按个发送出去就行了呗。
      

  4.   

    可能我叙述的不够详细,
    首先不使用UDP广播方式,安全等诸多因素考虑。
    我发送的数据不是少量信息,例如大到1G的数据,在服务器端我单独创建了一个发送数据的线程,向终端发送数据,在这个线程里面我连接终端(也就是说它请求连接终端),终端单独创建出一个监听线程,监听是否有服务器连接要求给它传送数据。所以说还是没有解决
    但是还是感谢各位热心的帮忙
      

  5.   

    纠正自己的一个错误!!互斥信号是需要设置的没错,但是windows信号,如果是自动的话的确是需要设置其有信号状态 setevent,因为参数设置成自动的话,当它waitforsingleobject的时候直接把信号改成无信号状态了。但是使用windows事件信号 还有一种东西叫手动!!!!
    这里就是突破口就是入口点!!!估计如果是手动的话 就能够实现TCP"同时"向多个终端传送数据了!!啊哈哈!!明天尝试一下!
    其实类似的还有好多如临界区等等,只不过当时自己理解错误!!导致思路偏差!
      

  6.   

    我最近刚搞了这个,给你点思路1,侦听线程是个死循环,不停再accept超时,
    2,但是accept成功以后,就另开一个线程处理,然后将socket保存
    3,使用“观察者模式”,你会方便很多
      

  7.   

    监听一个,连接多个。SOCKET ,就是这样的。
      

  8.   


    服务器程序基本都是向一个或多个终端传送数据的了(ftp服务器,http服务器,http/socks代理服务器,游戏服务器等).最简单模型:多线程阻塞模型,每个线程处理一个客户的所有请求.
    优点:简单,容易入门,代码相应其它模型要短小得多.要注意的只是一些共享数据要设置临界.
    缺点:不适合大型服务器,因为一个进程可以创建的线程是有限的,而且线程间切换还是挺需要CPU时间的,还有相应使用更多的系统资源(虚拟内存,物理内存等)比较复杂模型:异步模型(消息机制或I/O信号机制),一个或几个线程处理所有客户端的请求
    优点:更好地利用系统资源处理大量的客户请求,适合编写能处理很大量请求的服务器软件.
    缺点:编写相应地困难,不太适合于入门新人,对代码质量要求相应比较高