Delphi Udp套接字处理

Delphi Udp套接字处理,delphi,udp,delphi-7,Delphi,Udp,Delphi 7,我想使用UDP套接字简单地发送音频流。我的问题是,我不能让它工作,我想它会更简单,然后使用TCP IP 我所做的是在表单上删除了一个UDPSocket组件,对于服务器部分,我使用了以下代码 with udpServer do begin LocalHost := '127.0.0.1'; LocalPort := '5002'; Open(); Active := True; end; 对于客户端应用程序,请执行以下操作: with udpCl

我想使用UDP套接字简单地发送音频流。我的问题是,我不能让它工作,我想它会更简单,然后使用TCP IP

我所做的是在表单上删除了一个UDPSocket组件,对于服务器部分,我使用了以下代码

  with udpServer do
  begin
    LocalHost := '127.0.0.1';
    LocalPort := '5002';
    Open();
    Active := True;
  end;
对于客户端应用程序,请执行以下操作:

   with udpClient do
      begin
        RemoteHost := '192.0.168.100'; //my local address
        RemotePort := '5002';
        Open();
        Active := True;
      end;
问题是我没有收到任何东西。我做错了什么我没有任何第三方软件可以阻止连接


我没有找到任何合适的例子来使用这个组件,任何灵感来源都会非常感激。

您的服务器和客户端连接在同一个IP上

通常,如果将服务器应用程序IP地址设置为0.0.0.0,它将绑定到给定端口上的任何可用IP地址,包括127.0.0.1

然后,客户端必须连接到绑定的IP之一。相反,服务器监听127.0.0.1,客户端连接192.0.168.100

不要被“LocalHost”属性名所愚弄。这里的“本地”只是指您必须设置一个“本地”IP,一个分配给本地机器的IP,而不是一个“远程”(另一台机器的)IP,而客户端当然将连接到一个“远程”IP,即服务器的IP

如果且仅当您希望服务器仅对本地应用程序可用时,127.0.0.1是一个不错的选择,因为该IP范围仅限于同一台机器。如果要使其在计算机外部可用,必须将其绑定到有效的IP


无论您遇到什么问题,像或这样的工具对于了解正在发生的事情都非常有用。

您将服务器和客户端连接在同一IP上

通常,如果将服务器应用程序IP地址设置为0.0.0.0,它将绑定到给定端口上的任何可用IP地址,包括127.0.0.1

然后,客户端必须连接到绑定的IP之一。相反,服务器监听127.0.0.1,客户端连接192.0.168.100

不要被“LocalHost”属性名所愚弄。这里的“本地”只是指您必须设置一个“本地”IP,一个分配给本地机器的IP,而不是一个“远程”(另一台机器的)IP,而客户端当然将连接到一个“远程”IP,即服务器的IP

如果且仅当您希望服务器仅对本地应用程序可用时,127.0.0.1是一个不错的选择,因为该IP范围仅限于同一台机器。如果要使其在计算机外部可用,必须将其绑定到有效的IP


无论您遇到什么问题,像or这样的工具对于了解正在发生的事情都非常有用。

您将服务器绑定到
127.0.0.1
,因此它只接受专门连接到
127.0.0.1
的客户端。您的客户端正在连接到
192.0.168.100
(您的意思可能是
192.168.0.100
?)

您需要将服务器绑定到客户端实际连接的IP,或者将服务器绑定到
0.0.0.0
以接受任何本地IP上的连接


尽管UDP是无连接的,但此规则同样适用于UDP和TCP,因为它适用于它们共享的较低级别IP路由层。

您将服务器绑定到
127.0.0.1
,因此它将只接受连接到
127.0.0.1
的客户端。您的客户端正在连接到
192.0.168.100
(您的意思可能是
192.168.0.100
?)

您需要将服务器绑定到客户端实际连接的IP,或者将服务器绑定到
0.0.0.0
以接受任何本地IP上的连接


尽管UDP是无连接的,但这一规则同样适用于UDP和TCP,因为它适用于它们共享的较低级别IP路由层。

顺便说一句,我使用Delphi 7完成此任务除了感觉简单之外,您选择UDP还有什么原因吗?TCP对于广播来说绝对是比UDP更好的解决方案,除非您有非常特殊的需求。就套接字而言,Indy组件非常易于使用,并且有很多很好的示例。@DanielChapman UDP速度更快,建议用于语音流,因为它不要求重新发送丢失的数据包……这很有意义。如果您使用Delphi7,我绝对推荐Indy UDP服务器。我在这台计算机上没有IDE,但在安装组件时它有一个教程。这很简单。在单机上进行测试时,将服务器绑定到127.0.0.1:9098这样的地址,然后将客户端绑定到127.0.0.1:9099,通常通过指定可以绕过双绑定问题的端口。顺便说一句,我使用Delphi 7完成此任务除了感觉简单之外,您选择UDP还有什么原因吗?TCP对于广播来说绝对是比UDP更好的解决方案,除非您有非常特殊的需求。就套接字而言,Indy组件非常易于使用,并且有很多很好的示例。@DanielChapman UDP速度更快,建议用于语音流,因为它不要求重新发送丢失的数据包……这很有意义。如果您使用Delphi7,我绝对推荐Indy UDP服务器。我在这台计算机上没有IDE,但在安装组件时它有一个教程。这很简单。对于在单机上进行测试,请将服务器绑定到127.0.0.1:9098这样的地址,然后将客户端绑定到127.0.0.1:9099,通常是通过指定可以绕过双绑定问题的端口。我进行了修改以适应您的回答。不幸的是,它不起作用,我甚至尝试在两台机器上进行测试+谢谢你的努力。“不起作用”是一个非常普遍的问题:)你必须更好地解释发生了什么。例如,我建议的工具将向您展示在网络级别实际发生的情况,但问题也可能出现在您的应用程序级别。连接正常吗?包裹寄出去了吗?包裹收到了吗?等等…我做了一些修改以适应你的回答不幸的是,它不起作用,我甚至试着在2米上测试