gpt4 book ai didi

python - 如何使用 Python 流套接字作为代理?

转载 作者:行者123 更新时间:2023-11-30 23:48:54 25 4
gpt4 key购买 nike

我正在尝试编写一个 python 进程,该进程监听端口,当客户端连接到它时,它会启动一个执行以下操作的线程:

  1. 连接到远程服务 (http://193.108.24.18:8000/magicFM)

  2. 将收到的任何数据传递到连接的客户端(恰好是 Windows Media Player)

故事是,我想在工作时收听广播,但我不能,因为我在另一个国家/地区(仅在全国范围内可用)并且我无法更改计算机上的代理设置......但我有这台服务器,我想将其用作代理。

提前致谢。

这是我到目前为止所做的:

#!/usr/bin/env python
import socket, urllib2

TCP_IP = '0.0.0.0'
TCP_PORT = 5566
BUFFER_SIZE = 16 * 1024 #16 kb/s
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connection address:', addr
req = urllib2.urlopen('http://193.108.24.18:8000/magicFM')

while 1:
chunk = req.read(BUFFER_SIZE)
if not chunk: break
conn.send(chunk)


conn.close()

但它失败了...:

Traceback (most recent call last):
File "./magicfmproxy.py", line 17, in ?
conn.send(chunk)
socket.error: (32, 'Broken pipe')

最佳答案

首先,要使用 TCP 连接到远程站点,请使用此代码

import socket, struct

def connectToHost(host, port=80, timeout=0):
try:
sock=socket.socket()
timeval=struct.pack("2I", timeout, 0)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeval)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDTIMEO, timeval)
sock.connect((host, port))
return sock
except:
return None

您现在有一个连接到远程服务器的打开套接字。您必须创建一个监听套接字并等待该套接字建立连接。一旦建立连接,就使用 select 多路复用数据流。

我现在没有时间,这段代码更多的是它的外观草图。您需要适当的错误处理,并且可能需要在此函数中提供不错的错误消息,但如果没有人提出完整的解决方案,我可能会努力完成此代码。

关于python - 如何使用 Python 流套接字作为代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7875369/

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