2012-06-03 51 views
3

首先我打算创建2个程序服务器和客户端发送大字节数组。我刚开始使用UDPclient和udpserver组件进行测试。我不是,如果这是正确的方式。我可以在Delphi中使用UDPClient和UDPServer来发送大量数据吗?

我发现程序的例子,但它是用旧版本的Delphi编译的,当我编译时我收到一个错误。

HostName.Caption := UDPServer.LocalName; 
HostAddress.Caption := GStack.LocalAddress; 
Port.Caption := IntToStr(UDPServer.DefaultPort); 
BufferSize.Caption := IntToStr(UDPServer.BufferSize); 
UDPServer.Active := True; 

看来udpserver.localname是旧版本。我需要找到在这里使用什么属性。如何在udpserver组件中获取和写入主机名。 udpclient具有主机性能和workes很好,我可以编译客户端程序

谁能帮我放什么,而不是“的localName”属性

如果有人能指点我另一种方式来发送大的字节数组。它的大小将是大约120000。我会在每分钟发送

谢谢

+0

你为什么使用UDP而不是TCP? – FHannes

+0

我不知道,我没有具体的原因,刚开始用UDP –

+4

那么先来了解一下UDP和TCP的区别。在UDP中,您没有保证您会收到已发送的数据包,并且收到的数据包的顺序可能与发送的顺序不同。 UDP通常用于实时协议(如VOIP,游戏等)。如果这不是先决条件,我强烈建议你采用TCP路由,因为它更容易学习...... – whosrdaddy

回答

4

这是最好使用TCP,因为它可以在传输的数据检测,腐败和再次请求损坏的数据包。检测发生在通过检查数据包与16-bit checksum,这只会检测错误,但不允许系统纠正它,这是再次请求数据的地方。

这可能是最方便的使用Indy套接字库随Delphi一起创建TCP套接字。 TIdTCPServer和TIdTCPClient组件应该很好地完成这项工作。

您在这里可以找到使用印地库的一些演示的:

+0

谢谢FHannes –

+0

你的第二句话可能是指UDP或TCP或两者。这是最不清楚的。在任何情况下,TCP和UDP都不使用奇偶校验位,它们使用16位校验和。 – EJP

+0

@EJP你是对的,我的不好,自从我在大学开始我的网络协议入门课程以来已经有一段时间了。 – FHannes

0

这取决于你要发送超过网络中的数据。如果你想通过网络发送文件,你应该使用TCP协议,因为它保证了在服务器端接收到的数据将在客户端发送。如果你想发送的数据有损像语音(我的意思是不重要,我们有中间和数据的延迟或损失),你可以使用UDP协议。它会更快,因为它没有检查数据反腐败的开销。在UDP中,您可能会丢失数据包或数据报,因此UDP被称为无连接协议,因为事实上没有连接。我认为所有已知的编程语言都支持TCP和UDP连接。

1

GStack.HostName是替换旧的LocalName属性。

UDP是基于消息的传输。 120000的字节太多以适应单个UDP消息。你将不得不把它分成小块。要使用UDP发送大量数据,请考虑使用基于UDP的传输协议,例如TFTP。为此,Indy有TIdTrivialFTPTIdTrivialFTP组件。

否则,切换到TCP,这是一个基于流的传输。然后您可以发送尽可能多的数据。

相关问题