Udp套接字处理

问题描述:

我想使用UDP套接字来简单地发送一个音频流。我的问题是,我无法得到它的工作,我认为它会更简单,然后使用TCP IP。Udp套接字处理

我做什么我DROP掉一个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; 

的问题是我不接收任何东西。我做错了什么我没有任何第三方软件可以阻止连接。

我没有找到任何合适的例子来使用这个组件任何灵感来源将不胜感激。

+0

btw我使用Delphi 7进行这项任务 – opc0de 2012-02-05 13:05:18

+0

是否有你选择UDP的原因,除了它感觉更简单?对于广播来说,TCP绝对是一个比UDP更好的解决方案,除非你有非常明确的需求。就套接字而言,Indy组件非常易于使用,并且有很多很好的示例。 – 2012-02-05 17:22:19

+0

@DanielChapman UDP速度更快,建议用于语音流,因为它不要求丢失重新发送的数据包...... – opc0de 2012-02-05 17:28:09

您有服务器和客户端连接在相同的IP上。

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

然后客户端必须连接到一个绑定的IP。相反,您的服务器正在侦听127.0.0.1,客户端连接到192.0.168.100。

不要被“LocalHost”属性名称所迷惑。这里的“本地”意味着你必须设置一个“本地”IP,一个分配给本地机器的IP,而不是另一台机器的“远程”,而客户端当然会连接到“远程”IP,服务器的。

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

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

+0

我做了修改,以适应你已经回答不幸,它不起作用,我试着甚至在2台机器上测试.... +1的努力谢谢。 – opc0de 2012-02-05 15:22:33

+2

“不工作”是一个非常普遍的问题:)你必须更好地解释发生了什么。例如,我建议的工具将向您显示网络级别实际发生的情况,但问题也可能出现在您的应用程序级别。连接是否正确发生?数据包是否被发送?数据包是否收到?等等...... – 2012-02-05 17:34:39

您正在将服务器绑定到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路由层。

+0

感谢您的回复,ldsandon也提出了同样的问题,但不幸的是它不起作用。我仍然没有收到任何东西... – opc0de 2012-02-05 22:24:50

+0

你没有显示任何你的阅读或写作代码,所以每个人都必须猜测问题..请显示其余的UDP代码。 – 2012-02-06 00:35:05