一个使用NMUDP控件后产生的错误,不知道是不是控件有问题,请明白人指点一下,谢谢!(100分)

  • 主题发起人 主题发起人 jieson
  • 开始时间 开始时间
J

jieson

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下
NMUDPMain.RemoteHost := ServerIP;
NMUDPMain.ReportLevel := Status_Basic;
NMUDPMain.LocalPort := 4567;
NMUDPMain.RemotePort := 5678;
ConnectWay := 'UDP方式' ;
bindingnumber := 2342;
SendToStream:=tmemorystream.Create ;
try
SendToStream.Write(MainForm.buff[1],length(MainForm.buff));
MainForm.NMUDPMain.SendStream(SendToStream);
finally
SendToStream.free;
end;
症状:
当serverip错误,或者serverip上5678端口没开,或者serverip不存在,总之是程序连不上服务器的话,
程序就会出错,错误提示如下:
Project Project1.exe raised exception class UDPSockError with message 'Host Lookup Canceled'
Process stopped.Use Step or Run to continue.
错误的原因很明显,只是我想捕捉到这个错误,应该怎么做?
 
自己up一下吧!
 
可以在它的事件里捕获错误
 
try
except
end;

 
我知道是哪错了,用try没有用啊。还有,udp的那个demo把服务器名输入错误也是有问题的。
就是这个问题,大家可以试市/

对了,补充一点,用NMUDP控件的OnInvalidHost事件来处理是不可行的,因为谁也不能阻止用户按cancel
控制用户的输入格式也是不可行的,因为谁也不知道serverip的机器是不是在运行。
不知道先搜索一下serverip的port5678是不是可行,要是这样,该怎么搜索呢?

有一个不让他报错的办法,但是却会出现另一个提示:
菜单 Tools/debug options/language exceptions/去掉 stop on delphi exceptions 的勾之后
提示:hostlookup canceled,我要的是提示产生的位置。
我不想要他这个提示啊!
 
哎,这边也这么冷清,没人说点实质性的东西。
 
你想扫描端口的话,就找一下扫描端口的贴子吧。
我想你的程序脱离IDE运行一下,就不会出现这个提示了吧?
学习!
 
我不是想扫描端口,是在做一个通讯的模块,考虑到的一些错误罢了。
 
是不是问题没说清楚啊,真的没人知道怎么办吗?
急着救命啊!各位大哥大姐拜托了!
我是新手,还有95分,谁帮帮忙,我剩下的分也给他了!
 
NMUDPMain.RemoteHost := ServerIP;
NMUDPMain.ReportLevel := Status_Basic;
//没必要写 NMUDPMain.LocalPort := 4567;
NMUDPMain.RemotePort := 5678;
ConnectWay := 'UDP方式' ;
bindingnumber := 2342; //UDP每次最大只能传输2048字节
SendToStream:=tmemorystream.Create ;
try
SendToStream.Write(MainForm.buff[1],length(MainForm.buff));
MainForm.NMUDPMain.SendStream(SendToStream);
finally
SendToStream.free;
end;
 
to wql:
老哥你大概没看明白我的问题,拜托你再仔细看看吧,我贴的代码是我做的东西的一部分,
你提出来那些确实没必要的。
这个问题困扰我好久了,csdn那边也没人回答……
 
to jieson:
这个问题我也碰到过,在OnInvalidHost里可以解决掉的。
你要想更完美的解决方案,最好自己做一个udp,或者找一个nmudp的辕马。
 
看来是没办法了……
接受答案了。
 
要是Delphi5也许有bug,我用cBuilder6没问题的
 
多人接受答案了。
 
后退
顶部