gpt4 book ai didi

python - 通过 TCP 在客户端代理服务器中发送文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:56 25 4
gpt4 key购买 nike

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

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

这是否可能,比如能够在转发到服务器之前在代理处更改/保存来自客户端的文件。请指出正确的方向。任何帮助将不胜感激。感谢您的宝贵时间和宝贵的帮助/建议。

问候。

最佳答案

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 步之间的代理中添加 sleep ,而不是直接将从客户端接收到的数据发送到服务器,您可以读取文件并发送内容 - 这样您就可以在之前手动更改文件它被发送到服务器。

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

关于python - 通过 TCP 在客户端代理服务器中发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18088048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com