2

我正在开发一个需要通信的工具:通过互联网与该工具的其他远程实例发送和接收文件。在这种情况下最好使用哪种通信选项?插座?

4

6 回答 6

5

套接字绝对不是要走的路。相反,您应该使用已经存在的更高层协议,例如 FTP 甚至 HTTP。套接字仅公开裸 TCP/IP 功能。因此,要发送/接收文件,您最终将自己添加应用程序逻辑(例如,您需要处理丢失的数据包)。更高层的协议已经为您做到了这一点。

于 2008-12-22T12:16:26.650 回答
1

关于 HTTP 的一点是,良好、成熟且(或多或少)经过安全审核的 HTTP 客户端和服务器库可用于几乎任何语言或平台。这将节省您构建和调试自己的工作,如果 HTTP 服务器可以暴露于公共互联网,安全性是一个重要问题。

编辑:对于 C#,您可以尝试Windows Communication Foundation,它也支持更高级别的协议。

于 2008-12-22T13:52:06.363 回答
0

这在很大程度上取决于它们所运行的环境。只要您检查读取和写入是否成功,TCP 套接字就可以直接使用。但是,您可能会遇到防火墙问题,或者您可能不想在每一端处理原始字节流,在这种情况下,HTTP 或 FTP 等更高级别的协议可能是更好的解决方案。

它还取决于您正在使用哪种语言以及对其库中的特定协议提供什么支持。

于 2008-12-22T12:07:04.190 回答
0

您不应该期望能够通过 Internet 与任意机器建立入站连接 - 防火墙策略几乎肯定会妨碍您。

因此,您最好拥有一个中央服务器,该工具的所有实例都连接到该中央服务器,并且可以将文件上传到该中央服务器以供其他实例随后下载。

根据其他答案,我不建议使用低级套接字连接。HTTP 可能是正确的方法。

于 2008-12-22T12:19:06.083 回答
0

从您对其他答案的评论看来,您将文件传输与文件加密混淆了。正如其他人所指出的,您可以使用 HTTP 或 FTP 来传输文件。HTTP 已经在 SSL 上运行,它可以验证服务器、加密流量并(需要做更多工作)验证客户端。

如果您还希望文件本身也被加密,那么最好的选择是再次使用已经存在的东西,例如 PGP(或它的实现,例如 GPG)。您也可以查看 S/MIME,但 PGP 会更简单。如果您重新发明自己的加密,您会发现难以避免的陷阱太多。

于 2008-12-22T12:41:08.193 回答
0

如果您只需要在实例之间进行简单的文件传输,我建议您查看适用于您的语言的任何可用的 tftp 客户端/服务器库。

于 2008-12-22T14:02:34.377 回答