问两个关于端口的问题(28分)

  • 主题发起人 主题发起人 anndy1999
  • 开始时间 开始时间
A

anndy1999

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我用的是idudp的控件,我怎样检测当前端口没有数据呢?
详细的情况是:之前这个端口一直在接收数据(结构体数据形式),后来数据发完了, 我要给出提示,怎样判定呢?
2、也是IDUDP控件,我怎么知道当前端口已经被占用?
详细的情况是:程序开始绑定了一个端口号,如果已经开启了这个程序,则占用了此端口,当用户在重复开启这个程序后,给出提示,并退出此程序。(原来的不能退出)。不能用检测程序进程的方法,因为我的是ACTIVEX的形式,以IE的形式开启的。
谢谢!只有28分了,不要嫌少。大家帮帮偶。
 
2、可以使用 
for i:=5000 to 6000 do
try
IdUDPServer1.Bindings[0].IP:=Label3.Caption;
IdUDPServer1.Bindings[0].Port:=i;
IdUDPServer1.Active:=true;
break;
except
;
end;
 
1.你传输的结构体,应该有开始和结束吧?当结束标志传来的时候就以为着数据接收完毕;
2.虽然UDP的端口和串口不一样(重复打开同一个串口会出错),上面同志的思想方法也可行,另外你可以在idudp控件的connect的事件里写下ShowMessage('端口'+IntToStr(Socket.RemotePort)+'被打开!'); 意思就是连接RemotePort端口,如果可以连接上说明该端口被占用;
 
1、一定要对方传个结束标志吗?由于某种原因,这样有点不方便,我希望在我这边接收判定的。
 
udp协议本身是没有校验的。如果加上对话信息当然最好了。
现在我是使用这样的方式完成的/
 
To zywcd:
我试了下你的方法,没成功。
我是这样写的:(我另外写的一个窗体程序测试的,写在FORM的Oncreate事件中的),IdUDPServer1的defaultport比如设为9999,
try
IdUDPServer1.active := true;
except
applicaton.terminate;
end;
 
这样当然不可以,你应该循环,一直到找到一个没有使用的端口,然后再打开服务。
你现在这样是测试了,如果不对就马上结束程序了。
 
解决了。当初我把IdUDPServer1的active在对象设计器里设为true了.后来设为false就对了。
 
后退
顶部