通过TCP在Client-proxy-Server中发送文件

时间:2013-08-06 18:41:41

标签: python python-2.7 proxy network-programming client-server

我仍然是网络编程/ python的新手。 我想编写一个python客户端代理服务器程序,其中客户端应该能够将文件内容发送到代理,代理应该能够将其存储在文件中,如果需要,我应该能够更改文件的内容在将其转发到服务器之前,响应应该再次存储在代理端,然后再将其发送回客户端。

这一切都通过TCP连接和来自客户端的每个新请求新的TCP连接但是对于一个完整的周期(客户端 - >代理 - >服务器 - >代理 - >客户端)我需要持久连接(我不知道如何实现这一目标。)

这是否可行,就像在转发到服务器之前能够在代理服务器上更改/保存文件一样。 请指出正确的方向。 任何帮助将非常感激。 感谢您的时间和宝贵的帮助/建议。

问候。

2 个答案:

答案 0 :(得分:3)

examples at Python documentation提供了实现客户端 - 服务器系统的基本背景。但是,在两者之间添加代理需要对示例代码进行一些应用。

客户端代理服务器系统的骨架模型

客户端

客户应该做以下事情:

  1. 阅读即将发送的文件
    • open()fp.read()等。
  2. 创建套接字并建立与代理的TCP连接
    • socket.socket()proxysock.connect() SOCK_STREAM
  3. 将存储在步骤1中的变量中的文件数据发送到代理
    • proxysock.sendall()
  4. 等待回答
    • proxysock.recv()
  5. 关闭连接
    • proxysock.close()
  6. 代理

    代理基本上既是服务器又是客户端,应该做以下事情:

    1. 创建侦听套接字,等待来自客户端的传入连接,接受并存储传入连接的句柄
      • socket.socket()proxyserversock.bind()proxyserversock.listen()proxyserversock.accept()
    2. 从传入连接中读取数据
      • clientsock.recv()
    3. 将收到的数据存储到文件中
      • open()fp.write()等。
    4. 创建套接字并建立与服务器的TCP连接
      • socket.socket()serversock.connect()再次使用SOCK_STREAM
    5. 将从客户端收到的数据发送到服务器
      • serversock.sendall()
    6. 等一下
      • serversock.recv()
    7. 将答案传递给客户
      • clientsock.sendall()
    8. 关闭与服务器和客户端的连接,但保持侦听套接字打开
      • serversock.close()clientsock.close()
    9. 服务器

      服务器应该执行以下操作:

      1. 创建侦听套接字,等待来自代理的传入连接,接受并存储传入连接的句柄
        • socket.socket()serversock.bind()serversock.listen()serversock.accept()
      2. 从传入连接中读取数据
        • proxyclientsock.recv()
      3. 将收到的数据存储到文件中
        • open()fp.write()等。
      4. 向代理发送答案
        • proxyclientsock.sendall()
      5. 关闭连接,但保持侦听套接字打开
        • proxyclientsock.close()
      6. 附加说明

        实施上述基本模型后,您可以轻松开始添加更多功能。例如,您可以在步骤3和步骤4之间在代理中添加睡眠,而不是直接将从客户端接收的数据发送到服务器,您可以读取文件并发送内容 - 这样您就可以手动更改文件它被发送到服务器。

        如果您想真正了解网络编程的基础知识,我建议您阅读Beej's Guide to Network Programming。这些示例在C中,但基本原则也适用于Python(以及其他语言)。

答案 1 :(得分:1)

我真的不知道你在套接字编程方面的经验。如果您对套接字没有了解以及如何处理它,那将是一个很大的学习曲线[对我来说至少]。但我绝对建议你检查扭曲的框架Python。 http://twistedmatrix.com。我发现它有很好的记录并且有很大的支持。你可以做很多事情,很少有时间理解。