熟悉INDY udp 的高手请进(100分)

D

dffycb

Unregistered / Unconfirmed
GUEST, unregistred user!
我用indy9的 udp控件 做了一个试验程序,用能上网的局域网机器发消息给有固定ip的机器可以收到,但是反过来就不行.局域网机器的动态端口好像不是 ABinding.PeerPort.
我是用同一个程序,即程序中既有client udp控件 也有 server udp控件
我应该如何设定(或动态设定)端口,才能实现我的目的.
但使用delphi 的FastNet的udp 的FromIP和FromPort 却可以实现.
请赐教,谢谢!
 
你固定IP的机器根据你收到的IP和端口来返回数据,可能有的时候每次都不一样
你发送有一定格式的数据,前面加上用户名之类的数据,这样动态更新局域网机器
的端口,每次发送数据的端口都不一样就可以了
 
to 张无忌
indy 的udp clientudp and serverudp 是分开的,固定IP的服务端机器只能在收到数据的情况下,用
ABinding.SendTo返回给客户端的clientudp 而不能用服务端的clientudp发给客户端的serverudp.
(客户端在局域网内)
给一段代码,验证就行


 
高手在哪????
 
你的udpserver接到哪个端口发过来的数据就用分析就可以把端口和IP记下来返回给这个IP
就OK了
 
to 张无忌
你试验了吗?udpserver接到的端口
只能用ABinding.SendTo返回给客户端的clientudp 而不能用服务端的clientudp
发给客户端的serverudp.关键是indy的udp收和发是分开的.
使用delphi 的FastNet的udp 的FromIP和FromPort 可以实现.(NMUDP的收和发是合在一起的)
如果你成功的话,给段代码好吗.

 
呵呵,我也领教了IdUDP的怪异之处了。要反过来用,中间的那台用IdUDPClient,其它用IdUDPServer就行了。
 
最近和很多用IDUDP控件的朋友聊了,才知道INDY的这个控件很特殊哟,
楼上说的没错,
 
能用ABinding.SendTo返回给客户端的clientudp 也应该能用服务端的clientudp
我在单机上试过服务端用 IdUDPServer1.Send( )发送,但客户端大约如下
var
s:string;
begin
s:=' ';
IdUDPClient1.Send('127.0.0.1',69,'ok');
while s<>'close' do
begin
//memo1.Lines.add(s);//
s:=IdUDPClient1.ReceiveString();
end;
end;
 
indyudp可以穿过代理服务起吗?
 
试试下面的代码,我以前做过的:

procedure TForm1.button1Click(Sender: TObject);
var
ReceivedString :String;
begin
IdUDPClient1.Host := Edit1.Text;
IdUDPClient1.Send('12345');
try
ReceivedString := IdUDPClient1.ReceiveString();
except
end;
ListBox1.Clear;
while ReceivedString <> '' do
begin
ListBox1.Visible := True;
ListBox1.Items.Add(ReceivedString);
ReceivedString := '';
ReceivedString := IdUDPClient1.ReceiveString();
end;
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
s:string;
begin
s:='abcd';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort,s[1], Length(s));
end;
 
顶部