我在服务器端设置了一组TFileStream(Array of TFileStream)负责给客户端传送文件,客户端连接后就从这组TFileStream中找一个可用的TFileStream负责这个连接的文件传输,现在的问题是,没发送一个包时候都会执行OnExecute事件,我怎么来知道这个事件对应的连接所用的TFileStream,本来想把客户端的IP和TFileStream所在组的index做一个对应,可是有时候一个IP我要起用多个连接,这样就不行了。还有一个问题是,我测试了一下,一个连接创建后,OnExecute中的AThread,它的ThreadID属性都一样的,是不是意味着连接创建后这个AThread就一直保持不变,而且我注意到在OnConnect和OnDisconnect时间中都有这个AThread参数,这几个事件中的AThread参数是不是指同一个,如果是的话我觉得可以考虑把thread和FileStream建议一个对应关系,用来确认当前连接用的是哪个FileStream。大家帮忙看看,如果上面的思路行不同或则各位有更好的解决方法,请大方点说啊!

解决方案 »

  1.   

    IIdTCPServer 的AThread是对每一个连接的,也就是说,每一个客户端连接,服务器就开一个连接线程AThread , 你要在连接成功后加入到一个容器(threadlist)中,并对该连接的data属性加以修改(目的是为了后面的使用), 以后对那个客户(连接)发送,就在容器中循环(通过data属性)找到该线程,再向这个线程发送就可以了