IdUDPServer的问题!这句到底什么含义?熟悉的进! ( 积分: 100 )

  • 主题发起人 主题发起人 wqy888
  • 开始时间 开始时间
W

wqy888

Unregistered / Unconfirmed
GUEST, unregistred user!
IdUDPServer1.Bindings.Add;

他有什么作用 既然是ADD 那么就可以有很多是不是?
也就是说IdUDPServer可以并发监听若干个端口了

如:
v:='0.0.0.0';
e:=5000;
for i :=0 to 1000 do begin
IdUDPServer1.Bindings.Add;
IdUDPServer1.Bindings.Items.IP:=v;
IdUDPServer1.Bindings.Items.Port:=e+i;
IdUDPServer1.Bindings.Items.Send(....); //假设
IdUDPServer1.Bindings.Items.Recv(....);//假设
end;

那么是不是可以独立的去收发呢[?]
5000 发 收
5001 发 收
5002 发 收
5003 发 收
5004
......

不过测试了半天也没发出去 谁出来解释一下!
可以这么做吗? 如果可以应该怎么去处理?
 
IdUDPServer1.Bindings.Add;

他有什么作用 既然是ADD 那么就可以有很多是不是?
也就是说IdUDPServer可以并发监听若干个端口了

如:
v:='0.0.0.0';
e:=5000;
for i :=0 to 1000 do begin
IdUDPServer1.Bindings.Add;
IdUDPServer1.Bindings.Items.IP:=v;
IdUDPServer1.Bindings.Items.Port:=e+i;
IdUDPServer1.Bindings.Items.Send(....); //假设
IdUDPServer1.Bindings.Items.Recv(....);//假设
end;

那么是不是可以独立的去收发呢[?]
5000 发 收
5001 发 收
5002 发 收
5003 发 收
5004
......

不过测试了半天也没发出去 谁出来解释一下!
可以这么做吗? 如果可以应该怎么去处理?
 
监听就是监听了
发送用IdUDPClient
这Indy也是郁闷 为什么把UDP搞出个Client 和 Server
 
其实IdUDPServer也可以发送的(连不连上都可以发送)

IdUDPServer1.DefaultPort:=9000;//自己也要有端口
IdUDPServer1.Active:=True; //开始监听

v:='0.0.0.0'; //实际地址就这样吗,这可不行---------->例子也应这样呀'192.168.0.1'
e:=5000;
for i :=0 to 1000 do begin
IdUDPServer1.SendBuffer(v,e+i,YourBuffer,LenYourBuffer);//精简了
end;
//向端口5000-6000发送数据
 
你把我的问题弄错了 你弄反了[:(]
我是想IdUDPServer能不能 多对1

你是1对多了! 你把你的例子反过来!你说的是发送
你对应你刚才写的写一个接收看怎么实现?

----------
其实IdUDPServer也可以发送的(连不连上都可以发送)

IdUDPServer1.DefaultPort:=9000;//自己也要有端口
IdUDPServer1.Active:=True; //开始监听

v:='0.0.0.0'; //实际地址就这样吗,这可不行---------->例子也应这样呀'192.168.0.1'
e:=5000;
for i :=0 to 1000 do begin
IdUDPServer1.SendBuffer(v,e+i,YourBuffer,LenYourBuffer);//精简了
end;
//向端口5000-6000发送数据
----------------------------

另一个接收的就对应IP v:='0.0.0.0'; //实际地址就这样吗,这可不行---------->例子也应这样呀'192.168.0.1'

端口对应5000~6000 收到信息然后返回给发送方 说你发到这个端口的消息我收到了!
 
IdUDPServer1.Bindings.Add;
加的是什么 是发送的 还是接收的 被你弄的更迷糊了[:(]
 
这个进程当数据接收到时自动触发,你只管填代码就行了

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
ABinding.PeerIP //对方的IP 根据端口和ip来判断用户,对内外网都适用
ABinding.PeerPort //对方的端口

 AData.Size //对方的数据长度
AData.Position:=0 //将指针移到开始位置
AData.Read(MyBuffer,MyBufferLen);//读取对方数据

end;
 
这个进程当数据接收到时自动触发,你只管填代码就行了
你说的这句什么意思?
你说自动另一端自动读取数据吗?

描述如下:
C:发送端 S:接收端
那你想C端发送的是
IdUDPServer1.SendBuffer(v,e+i,YourBuffer,LenYourBuffer);//精简了
e+i//是变化的  S端对应的V是不变的
那B这一端怎么监听E+I这个变化端口 你写程序实验了吗?


ABinding.PeerIP //对方的IP 根据端口和ip来判断用户,对内外网都适用
ABinding.PeerPort //对方的端口

这谁都明白的 !
我问的是
IdUDPServer1.Bindings.Add;
他是做什么用的?怎么用?是不是可以自己绑定监听很多端口! 郁闷
我说的不明白 你看明白了吗?

----------------------------------------------------------------------
重新描述一下继续解释:
把问题简化一下 假设下面2台机器IP都是固定的!S的端口固定 可以接收若干客户端的连接
C: S:
192.168.0.1 192.168.0.2:9999
但C端能不能模拟成若干个客户端去连接S 当然可以考虑多线程 为了讨论问题排除用多线程!

那么C 就要模拟成若干个端口了 如
192.168.0.1:1000
192.168.0.1:1001
192.168.0.1:1002
192.168.0.1:1003
192.168.0.1:1004
.....
而这个过程好象可以用
IdUDPServer1.Bindings.Add;来完成

那么剩下的问题就是C怎么利用这些端口来和S联系了!
你这次把问题看明白了吗?别说不用线程你就建立1000个程序去连哦[:D]
 
支持自己一下!支持自己一下!支持自己一下!
 
UDPCLIENT发送时是随机绑定端口的,UDPSERVER才是按指定端口发送的,如果要穿透NAT等,就要用UDPSERVER来发送。
 
我也想知道的,帮你顶一下。
 
后退
顶部