Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 插座是最好的方式吗?_Sockets_Communication - Fatal编程技术网

Sockets 插座是最好的方式吗?

Sockets 插座是最好的方式吗?,sockets,communication,Sockets,Communication,我正在开发一个需要通信的工具:通过internet与该工具的其他远程实例发送和接收文件。在这种情况下,最好使用哪种通信选项?套接字?这在很大程度上取决于它们运行的环境。只要检查读写是否成功,TCP套接字就可以直接使用。但是,您可能会遇到防火墙方面的一些问题,或者您可能不希望处理两端的原始字节流,在这种情况下,更高级别的协议(如HTTP或FTP)可能是更好的解决方案 这还取决于您使用的是哪种语言,以及它的库中对特定协议提供了什么支持。Sockets肯定不是解决问题的方法。相反,您应该使用已经存在的

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

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


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

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

您不应该期望能够在internet上建立到任意机器的入站连接-防火墙策略几乎肯定会成为障碍

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


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

从您对其他答案的评论来看,您似乎混淆了文件传输和文件加密。正如其他人指出的,您可以使用HTTP或FTP传输文件。HTTP已经可以在SSL上工作,SSL可以对服务器进行身份验证,对通信量进行加密,并(再做一点工作)对客户端进行身份验证


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

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


编辑:对于C#,您可以尝试支持更高级别协议的版本。

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

实时意味着通过ftp网络连接的套接字意味着只需拷贝NOS.的命令。。否则,即使是一封电子邮件也可以。我正在使用C#。FTP看起来是一种方式,但我想知道如何使用它进行公钥交换。。。也许把钥匙包在一个txt文件中发送?恐怕我帮不了什么忙。看看SFTPhmm,集中文件传输。。。这会不会与文件/文本加密应用程序(这就是我正在构建的应用程序)一起运行?可能不会,但这一细节不在规定的要求中!尽管如此,关于入站套接字连接的评论仍然有效。好的,那么我将研究HTTP。谢谢你们的帮助,非常感谢。好吧,既然应用程序将发送加密文件,文件的对称密钥将使用RSA发送,您是否同意FTP是最好的选择?当然,除非您知道您的应用程序的用户有可能更改防火墙策略。更糟糕的是,FTP不能很好地使用防火墙,因为它使用了两个套接字(一个用于命令,一个用于数据)。我使用TriDES或AES进行文件加密,而RSA用于加密文件对称密钥的安全通信。现在,我正在寻找最好的通信选项来获取文件和公钥(HTTP或FTP)。在我看来,我还没有重新发明任何东西。好吧,像PGP和S/MIME这样的软件已经实现了第一部分。第二部分是HTTP/FTP等。PGP/S/MIME还解决了信任公钥的问题,不过如果您有一个非常简单的案例,您可能不需要它。WCF没有HTTP客户端吗?