3

首先,我打算创建 2 个程序服务器和客户端来发送大字节数组。我刚开始使用 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 具有 Host 属性并且工作正常,我可以编译客户端程序

谁能帮我放什么而不是“localname”属性

如果有人可以建议我另一种发送大字节数组的方法。它的大小约为 120000 。我会在每一分钟发送

谢谢

4

3 回答 3

4

最好使用 TCP,因为它可以检测传输中的数据损坏并再次请求损坏的数据包。检测是通过根据16 位校验和检查数据包来进行的,这只会检测错误,但不允许系统更正它,这是再次请求数据的地方。

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

你可以在这里找到一些关于使用 Indy 库的演示:

于 2012-06-03T17:19:54.660 回答
1

GStack.HostName是旧LocalName物业的替代品。

UDP 是基于消息的传输。120000 字节太多,无法容纳在单个 UDP 消息中。你必须把它分成小块。要使用 UDP 发送大量数据,请考虑使用基于 UDP 的传输协议,例如 TFTP。Indy 拥有用于此目的的组件TIdTrivialFTPTIdTrivialFTP

否则,切换到 TCP,它是基于流的传输。然后,您可以发送任意数量的数据。

于 2012-06-04T23:34:51.447 回答
0

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

于 2012-06-04T16:20:49.860 回答