udpserver的问题 (100分)

  • 主题发起人 主题发起人 difilwy
  • 开始时间 开始时间
D

difilwy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用idudpserver做了一个tftp server,在只有一个客户端的时候运行没有问题
但是,当同时有2台以上客户机getfile的时候,idudpserver却莫名其妙的只响应一个
客户机的请求(总是最后一个要求传输的客户机得到响应),直到这个客户机的文件传
输完,才会响应其他的,但是这时候其他的客户机早就超时了。
问题出在什么地方呢?怎样才能做到像servu那样那么多连接,也会均匀的响应客户端呢?
 
使用多线程!不要把你的文件传输代码放在UDPServer的ONUDPREAD事件中,专门创建一个线程类负责具体的服务(FTP或者HTTP等),在ONUDPREAD中,读出ADATA后,作一些容错和身份验证的工作后,就将ADATA交给线程去处理。你的程序可以考虑使用如下的结构:
1、在主程序的ONCREATE()事件中,完成
界面初始化;
创建服务线程管理器(其实就是一个线程,完成服务线程的管理);
IDUDPSERVER.ACTIVE:=TRUE;
2、在UDPServer的 ONUDPREAD()中,完成
身份验证等;
唤醒服务线程管理器;
3、在服务线程管理器的EXECUTE()中,根据请求(可以用全局变量保存,也可考虑其他更具有线程安全的方法),创建不同的服务线程,提供服务,这里你可以实现提供服务数量的控制等。
当然,你也可以不创建服务线程管理器,由主线程直接创建服务线程,这样更简单一些,但是结构会比较杂乱,而且不利于功能的扩充。
 
后退
顶部