【问题标题】:Delphi indy Remote host UDP client/serverDelphi indy 远程主机 UDP 客户端/服务器
【发布时间】:2012-04-11 22:51:21
【问题描述】:

是否可以使用 indy 客户端连接到远程主机并将数据发送到本地服务器。
我尝试这样的事情,但我没有收到任何东西:

  Server:=TIdUDPServer.Create;
  Server.OnUDPException:=UDPException;
  Server.OnUDPRead:=UDPRead;
  Server.Bindings.Add.Port:=10;
  Server.Active:=true;
  //Server is listening to local IP

  Client:=TIdUDPClient.Create;
  with Client do begin
    Host:= '130.204.159.205'; //My IP
    Port:=10;
    Send('Hello');
  end;

我的目标是创建将通过互联网与 UDP 通信的客户端/服务器应用程序

【问题讨论】:

标签: delphi udp client-server indy


【解决方案1】:

是的,这是可能的。让我们绕过一些问题,试试这个:

Host := '127.0.0.1'

如果这不起作用,请检查您的 Windows 防火墙是否允许您的测试应用程序连接到自身。 (关闭基于本地软件的防火墙,然后重试。)

【讨论】:

  • 老兄,UDPServer 没有这样的变量主机。有 IP:='127.0.0.1' 但同样的我没有收到文本
  • 再尝试一次,然后我放弃了 - 在本地尝试一下,看看会发生什么。如果它在本地工作而不是在机器之间工作,那么它表明机器之间存在网络问题/连接,而不是在软件中。这是一种隔离问题的尝试。
  • (由于本地软件防火墙,它也可能在本地失败,这就是我说关闭所有本地防火墙的原因。)
  • 最可能的原因是您的路由器上没有指定端口转发。数据包到达您的外部公共 IP,但路由器不知道在 LAN 内将它们发送到哪里。这通常是处理路由器和公共 IP 地址时的典型问题。其他可能的原因是当您从 LAN 内部尝试时,您的路由器无法识别您的外部 IP。有些路由器只是阻止或完全忽略此类请求,因为它是某种环回。
  • 如果你家里有两台机器,把服务器设置在一台,客户端设置在另一台。使用内部 LAN IP (192.169.X.X),如果可行,它也可以在公共 IP 上运行。
【解决方案2】:

UDP 是一种无连接传输。它不能像 TCP 那样保证数据传输,尤其是在 Internet 这样的大型网络上。如果TIdUDPServer 没有接收数据,那么要么数据包一开始就没有到达机器,要么在TIdDUPServer 可以看到它们之前被阻止。使用数据包嗅探器(例如 Wireshark)来验证数据包是否到达 TIdUDPServer 正在侦听的 NIC。如果不是,那么您有网络问题。如果是,那么您有操作系统问题。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多