【问题标题】:Python: send file to a server without third-party libraries?Python:将文件发送到没有第三方库的服务器?
【发布时间】:2015-07-08 20:53:24
【问题描述】:

我有一个 NAT 后面的 Python 客户端和一个具有公共 IP 地址的 Python 服务器。我的工作是从客户端向服务器发送一个 pcap 文件(大小为几 MB),以及一个包含一些数据的 字典

是否有任何简单的方法可以在不借助第三方库(例如扭曲、龙卷风)的情况下做到这一点? 如果没有,最简单的选择是什么?

我认为我可以通过 http 发送 pcap 文件,这样在服务器端读取它会更容易,也许我可以通过首先 pickling 来处理字典 它。这会是一个好的解决方案吗?

(我可以完全控制服务器,我可以在其中安装任何东西)

【问题讨论】:

    标签: python file client server


    【解决方案1】:

    【讨论】:

    • 嗯。这样客户端和服务器至少应该就文件的目标路径达成一致,这样服务器就知道它属于哪个,对吧?
    • 我不知道您的系统是如何配置的,但是服务器上的 FTP 侦听器比客户端上更常见,因此您可能会将文件从客户端发送到服务器。但是您可以在客户端应用程序上编写一些逻辑来决定要发送到哪个远程目录,或者您可以在服务器端编写一个进程来检查存放在 FTP 目录中的文件,然后将它们复制到任何地方(基于文件名、文件类型,文件内容或其他任何内容。)
    • 谢谢。我想我可以让客户端和服务器首先就服务器将接收的文件的名称以及 ftp 服务器将侦听传入文件的端口号达成一致。然后,一旦传输完成,我会终止 ftp 服务器,“真实”服务器将加载传输文件的内容。听起来合理吗?
    • 如果您在已发送文件的名称中包含时间戳,以便始终保证文件名是唯一的,那么您无需终止 ftp 进程。您的其他进程可以开始使用 file1.timestamp1 而 file2.timestamp2 仍在发送。顺便说一句,如果您更喜欢使用 SFTP,您可以使用 Fabric (docs.fabfile.org/en/latest/api/core/…),尽管这是一个第三方库,因此不符合您的要求(但显然它并不难使用)。
    【解决方案2】:

    如果您可以在服务器上安装软件,并且服务器允许 HTTP 连接,那么您可以编写自己的简单 HTTP 服务器(Python 有用于执行此操作的库)。如果没有,答案将取决于服务器上可用的服务。

    【讨论】:

      【解决方案3】:

      您可以只使用带有 TCP 的经典套接字!

      您只需要通过 TCP 套接字发送文件并在 TCP 套接字服务器中接收它。

      将其作为文件读取,发送和接收。

      这可能会给你一些关于套接字的提示:https://docs.python.org/2/library/socket.html

      稍后我会发布一个小脚本,以防你没有解决你的疑问。

      【讨论】:

      • 是的,但是使用 TCP 你有一个流,所以你必须注意文件大小、文件的开头和结尾。我不想重新发明轮子:)
      • 是的,我同意你的看法。但是正如您所说的您不想要第三方库,我知道套接字将是一个不错的选择。
      • 当然。我的想法是在客户端尽可能少地安装,并在服务器端安装任何让我的生活更轻松的东西。 :)
      猜你喜欢
      • 2011-06-19
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2022-07-05
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      相关资源
      最近更新 更多