我正在研究一种需要进行通信的工具:通过互联网向该工具的其他远程实例发送和接收文件。在这种情况下哪种通信选项最好用?插座?
答案 0 :(得分:5)
套接字绝对不是要走的路。相反,您应该使用已经存在的更高层协议,如FTP甚至HTTP。套接字仅显示裸TCP / IP功能。因此,要发送/接收文件,您最终会自己添加应用程序逻辑(例如,您需要处理丢失的数据包)。更高层协议已经为您做到了这一点。
答案 1 :(得分:1)
关于HTTP的一点是好的,成熟的(或多或少)安全审计的HTTP客户端和服务器库可用于几乎任何语言或平台。这将为您节省构建和调试自己的工作量,如果HTTP服务器可以暴露给公共互联网,则安全性是一个重要问题。
编辑:对于C#,您可以尝试Windows Communication Foundation,它也支持更高级别的协议。
答案 2 :(得分:0)
它在很大程度上取决于它们所处的环境。只要您检查读写是否成功,TCP套接字就可以直接使用。但是,您可能在防火墙方面遇到一些问题,或者您可能不希望在每端处理原始字节流,在这种情况下,更高级别的协议(如HTTP或FTP)可能是更好的解决方案。
它还取决于您正在使用的语言以及对其库中特定协议的支持。
答案 3 :(得分:0)
您不应该期望能够在整个互联网上建立到任意机器的入站连接 - 防火墙策略几乎肯定会妨碍。
因此,您可能最好拥有一个中央服务器,该工具的所有实例都可以连接到该中央服务器,以及可以上载哪些文件以供其他实例后续下载。
根据其他答案,我不建议使用低级套接字连接。 HTTP可能是正确的方法。
答案 4 :(得分:0)
根据您对其他答案的评论,您会发现文件传输与文件加密混淆。正如其他人指出的那样,您可以使用HTTP或FTP来传输文件。 HTTP已经可以通过SSL工作,它可以验证服务器,加密流量和(通过更多的工作)验证客户端。
如果您希望文件本身也加密,您最好的选择是再次使用已存在的文件,例如: PGP(或GPG的实现)。您还可以查看S / MIME,但PGP会更简单。如果你重新发明自己的加密,你会发现很多陷阱很难避免。
答案 5 :(得分:0)
如果您需要的只是实例之间的简单文件传输,我建议您查找适用于您的语言的任何可用的tftp客户端/服务器库。