IdUDPClient和idUDPServer在局域网可以使用,但是外网ip没办法
我的小程序用的IdUDPClient和idUDPServer在局域网可以使用,但是外网ip没办法接收发送数据
这个是为什么 ?
网络没问题,在网上找个其他软件测试网络没问题。但是我的程序就有问题。请指点
procedure TForm_main.Button_sendClick(Sender: TObject);
var
str : string ;
begin
try
IdUDPClient1.Port:=strtoint(Edit_port2.Text);;
IdUDPClient1.Host:=Edit_ip2.Text;
IdUdpClient1.Active:=true;
IdUdpClient1.ReceiveTimeout:=5000;
str := Memo2.Text ;
IdUdpClient1.Send(str);
except
Memo2.Lines.Add('发送出错!');
end;
end;
procedure TForm_main.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s,cIP,cPort: String;
begin
try
DataStringStream := TStringStream.Create( ' ');
DataStringStream.CopyFrom(AData, AData.Size);
s := DataStringStream.DataString;
cIP := ABinding.PeerIP ;
cPort := inttostr(ABinding.PeerPort);
Memo1.Lines.Add(cIP+':'+cPort+' '+s);
ListBox_ip.Items.Clear;
ListBox_ip.Items.Add(cIP+':'+cPort) ;
except
Memo1.Lines.Add('接收出错!');
end;
end;
procedure TForm_main.Button_getClick(Sender: TObject);
begin
if Button_get.Caption = '关闭' then
begin
idUDPServer1.DefaultPort := strtoint(Edit_port1.Text);
Button_get.Caption := '打开' ;
idUDPServer1.Active := True ;
end
else
begin
Button_get.Caption := '关闭';
idUDPServer1.Active := false ;
end ;
end;
procedure TForm_main.ListBox_ipClick(Sender: TObject);
var
s : string ;
i,len : integer;
begin
s := Listbox_ip.Items.Strings[0] ;
len := length(s);
i := pos(':',s);
if i <> 0 then
begin
Edit_ip2.Text := MidStr(s,0,i-1);
Edit_port2.Text := MidStr(s,i+1,len);
end;
end;
这个是为什么 ?
网络没问题,在网上找个其他软件测试网络没问题。但是我的程序就有问题。请指点
procedure TForm_main.Button_sendClick(Sender: TObject);
var
str : string ;
begin
try
IdUDPClient1.Port:=strtoint(Edit_port2.Text);;
IdUDPClient1.Host:=Edit_ip2.Text;
IdUdpClient1.Active:=true;
IdUdpClient1.ReceiveTimeout:=5000;
str := Memo2.Text ;
IdUdpClient1.Send(str);
except
Memo2.Lines.Add('发送出错!');
end;
end;
procedure TForm_main.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s,cIP,cPort: String;
begin
try
DataStringStream := TStringStream.Create( ' ');
DataStringStream.CopyFrom(AData, AData.Size);
s := DataStringStream.DataString;
cIP := ABinding.PeerIP ;
cPort := inttostr(ABinding.PeerPort);
Memo1.Lines.Add(cIP+':'+cPort+' '+s);
ListBox_ip.Items.Clear;
ListBox_ip.Items.Add(cIP+':'+cPort) ;
except
Memo1.Lines.Add('接收出错!');
end;
end;
procedure TForm_main.Button_getClick(Sender: TObject);
begin
if Button_get.Caption = '关闭' then
begin
idUDPServer1.DefaultPort := strtoint(Edit_port1.Text);
Button_get.Caption := '打开' ;
idUDPServer1.Active := True ;
end
else
begin
Button_get.Caption := '关闭';
idUDPServer1.Active := false ;
end ;
end;
procedure TForm_main.ListBox_ipClick(Sender: TObject);
var
s : string ;
i,len : integer;
begin
s := Listbox_ip.Items.Strings[0] ;
len := length(s);
i := pos(':',s);
if i <> 0 then
begin
Edit_ip2.Text := MidStr(s,0,i-1);
Edit_port2.Text := MidStr(s,i+1,len);
end;
end;
...全文
相关推荐
使用IdUDPServer控件进行广播或单点收发的demo程序
这是使用Indy中的UDP控件demo程序修改而成的。对新手有帮助,因为原demo程序中只能单点发送,不能广播。我使用的是delphi7。
indy之路第一篇 UDP进行通讯(2)
接第一编,利用IdUDPClient和IdUDPServer控件,可以轻松的发送与接收数据,但是例子中仅限于本机。网络通讯的组件,仅向本机发送接收数据,没有多少意义。这一篇,就是对前一篇的完善。很简单,加两个Edit控件,一个用于设置要向哪台IP地址的电脑发送数据,一个用于设置接收数据的目标电脑的端口号。实际上,还可以更完善点,比如在发送的时候,可以加上本机的名字,本机的名字还可以设置为ini文件保存,这样,每次发送数据时,不但只发送需要的数据,还能够让对方知道,是谁发送过来的数据。
bcb2010 UDP通讯
用了IdUDPClient 和IdUDPServer两个控件做的简单的UDP通讯,在BCB2010下编译通过,对初学者可以学习使用。
ICS网络控件,Delphi 使用
比DElphi自带的网络控件使用更方便的网络控件,能在多个Delph版本中使用,对UDP有通信支持更科学合理。
indy UDP源码
indy UDP源码 delphi 用Indy的idUDPclient和idUDPServer分别负责发送和接收


网络通信/分布式开发
