通过TCP在ClientproxyServer中发送文件

2024-06-02 05:50:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这是否可能,比如在转发到服务器之前,可以在代理服务器上修改/保存客户端的文件。 请给我指一下正确的方向。 任何帮助都将不胜感激。 感谢您的时间和宝贵的帮助/建议。在

敬上。在


Tags: 文件程序网络服务器客户端代理内容客户机
2条回答

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()

代理人

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

  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()

服务器

服务器应执行以下操作:

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

附加说明

在实现了上面描述的基本模型之后,您可以轻松地开始添加更多的特性。例如,您可以在第3步和第4步之间在代理中添加睡眠,而不是直接将从客户端接收到的数据发送到服务器,而是读取文件并发送内容—这样,您可以在文件发送到服务器之前手动更改文件。在

如果你想真正学习网络编程的基础知识,我也建议你阅读Beej's Guide to Network Programming。这些例子是用C语言编写的,但基本原理也适用于Python(以及其他语言)。在

我不太了解你在套接字编程方面的经验。如果您不了解套接字以及如何处理它,这将是一个很大的学习曲线(至少对我来说)。但我明确建议您检查twisted framework Python。http://twistedmatrix.com。我发现它有很好的记录,并且得到了很大的支持。你能做这么多的事情是很少的时间和很少的理解。在

相关问题 更多 >