最近用delphi做一个tcp的通讯程序,第一次弄tcp,是一个服务器要和多个客户端(1000个以内)连接通信,我看了delphi7下的哪个netchat的例程,里面用到的是delphi自带的tcpsever和tcpclient组件,但只是实现了一对一的通信,那如何实现一对多的通信呢?网上说是要在tcpsever端用多线程处理,但不知如何创建多个接收处理线程,会的大侠能否指点一下,有代码最好,谢谢。

解决方案 »

  1.   

    idtcpsever自己已经有多线程了 不过是阻塞的 ,数量级比较小的并发访问里,直接在idtcpsever的excute方法里 处理好资源访问冲突就可以了
      

  2.   

    参考一下这里的socket例子吧:
     http://download.csdn.net/detail/geoff08zhang/4571358
      

  3.   

    用idtcpserver把,同步方式的开发方便,但不适合处理大量客户端连接,因为内部是一个连接一个线程处理,线程过多了时间都浪费在线程切换上。
    或者自己处理可以使用消息模式的或者事件模式的。windows下iocp是性能最好的。
      

  4.   

    这要看你的工作环境是局域网还是广域网。如果是局域网,或许你可以用 UDP 方式从服务端向所有客户端广播发送,这要看你的应用是什么。UDP 广播是效率最高的传送方式。要是广域网,你就无法采用 UDP 广播。正像楼上所说,想以 TCP 方式支持1000个连接很困难。一种通融的办法是采用多端口把1000个连接分散开,但是你的服务器必须得支持多端口。
      

  5.   

    tcpsever 可以连接多个客户端,
    你先创建一个先进先出的环形缓冲区,然后为每个客户端创建一个缓冲区,来了数据后保存到对应的缓冲区,然后在搞一个独立的线程来处理缓冲区中的数据.
      

  6.   

    1000个连接要走异步方式。用iocp模型轻轻松松支持。
      

  7.   

    IdTCPServer也可以搞定1000个链接的吧
      

  8.   

    idTCPServer走阻塞模式,1000个连接就要1000个线程。操作系统花在这些线程上的上下文切换就是个巨大的耗费,更别说你还是服务器端,还要提供很多计算服务了。