关于indy的一些问题,高手指点(100分)

  • 主题发起人 主题发起人 ht_yx
  • 开始时间 开始时间
H

ht_yx

Unregistered / Unconfirmed
GUEST, unregistred user!
1。Tidtcpserver每受到一个连接请求,就生成一个线程,这个线程的生存期多长?是不是一直存在,直到被断开。那onExecute事件是在主线程中排队处理还是个个线程中单独处理,我看他好像是线程类中的事件。
2。我的程序要带几百个客户端,平时每什么流量,但有时会大家一起发数据,用Tidtcpserver行不行?看到前面有人说行有人说不行,请高手指点。
3,好像TIdTCPConnection.ReadLn可以读不定长数据(看indy的demos猜得),而TIdTCPConnection.ReadBuffer就要定长,可不可以不定长,如何做到?我用一个string去接收readln,其间可不可以传送十六进制数据?听说Pascal的类型检查很严的。
4,可不可以直接对string中的字符进行位操作,是不是先付给一个byte的数组里好一些。
 
可以看看indy的demo我用d6+indy9.00.14实现你曰的功能,你可以到http://www.indyproject.org/下载最新的demo然后看看I9D6_Demos_24Nov02/IndyDemos/IdTCPDemo的内容,它对多用户进行处理比较经典实用。
1.idtcpserver对每个连接请求建个线程,直到它断开才结束线程的,但在onExecute中为方便处理是把所以连接的线程加入一个threadlist里,然后用临介区的方式进行处理,也就是每一时刻只处理一个用户的请求,没有轮到的就排队。
2.我曾经做过实验从广西传3-10M左右的数据到北京,同时有三个用户一起传没问题,全是拨号的。但由于我的项目要传的数据量都在100-300M之间所以我没完全用idtcpserver和idtcpclient来实现,而用它们来通讯,然后在server建个FTP,client用idftp把数据下载或者上传到指定地方,因为自己担心idtcp对大流量多用户处理不过来还是把传输的部分交给专业点的FTP去做。
3.其实也可以传不定长的数据的,只要每只把不定长的数据长度先传过去就OK了。((具体的好像一个方法就可以搞定,不过忘了,你找找吧
4.opp pascal是有对位操作的语法的,具体的我也忘了,查查资料吧。((好像跟没回答一样呵呵
 
哦,我的程序一次传输最多上k,应该没问题吧。这几天看了一些资料,发现其实如果单cpu的话,多线程也只不过,大家排队轮流上。
对于接收不定长数据,我想的办法是,分两次接收,一次收报头,从中分解出长度,再用此长度读数据,不过这样效率是不是有些低?
位操作也试过了用byte数组比较好一些。
嗯,在等两天看看别人还有什么高见没有
 
接受,谢谢
 
后退
顶部