谁用过NMDUP看看有没有遇到过这个奇怪的问题?
我也不知道是不是我的delphi有问题,但是我在别人机器上调试也有这样的问题---我们装的是一张盘上
的delphi6。
问题是这样的:
新建一个project,在form1上放一个NMUDP控件和一个Button控件,然后写了下面的代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, NMUDP, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
NMUDP1: TNMUDP;
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure Button1Click(Sender: TObject);
procedure NMUDP1StreamInvalid(var handled: Boolean; Stream: TStream);
procedure NMUDP1InvalidHost(var handled: Boolean);
procedure NMUDP1DataSend(Sender: TObject);
procedure NMUDP1BufferInvalid(var handled: Boolean;
var Buff: array of Char; var length: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
begin
showmessage('received');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
buff :string;
send:tmemorystream;
begin
buff := chr($03) + chr(13)+chr(00) + chr($09) + chr($02)+chr($00)+'jieson15000';
send := tmemorystream.Create ;
try
send.Write(buff[1],length(buff));
nmudp1.sendstream(send);
finally
send.Free ;
end;
end;
procedure TForm1.NMUDP1StreamInvalid(var handled: Boolean;
Stream: TStream);
begin
showmessage('StreamInvalid');
end;
procedure TForm1.NMUDP1InvalidHost(var handled: Boolean);
begin
showmessage('InvalidHost');
end;
procedure TForm1.NMUDP1DataSend(Sender: TObject);
begin
showmessage('DataSend');
end;
procedure TForm1.NMUDP1BufferInvalid(var handled: Boolean;
var Buff: array of Char; var length: Integer);
begin
showmessage('BufferInvalid');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
NMUDP1.LocalPort := 5678;
NMUDP1.RemoteHost := 'localhost';
NMUDP1.RemotePort := 4567;
end;
end.
运行之,在DataReceived的程序里加一个断点,按下button1,结果居然执行到了那个断点!
localport和remoteport明明不一样啊!
还有更奇怪的,把remotehost设置成网络上另外一台运行着的机器,运行时按下button1,居然
还能执行到DataReceived里,这时候看看DataReceived函数的参数FromIP,居然是我设置的那台机器
的ip!而那台机器没开的话,就会弹出invalidhost的对话框。
是不是如果机器的某个端口没开的话会返回个错误啊?因为上面说的时候在DataReceived函数里
NumberBytes=-1,就是说其实数据是没有发给自己的。
我就知道这么多了,不知道大家有没有遇到过这样的情况,请各位赐教!