用于转发流数据的Python脚本

用于转发流数据的Python脚本,python,port,forwarding,Python,Port,Forwarding,我试图从一个端口获取传入数据,并将其流式传输到另一台计算机上的端口。以下是我到目前为止的情况: import socket port = 8787 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(("", port)) print ("waiting on port:", port) while 1: data, addr = s.recvfrom(1024) print (data) ` 因此,我可以使用

我试图从一个端口获取传入数据,并将其流式传输到另一台计算机上的端口。以下是我到目前为止的情况:

import socket
port = 8787
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", port))
print ("waiting on port:", port)
while 1:
    data, addr = s.recvfrom(1024)
    print (data)
`

因此,我可以使用上面的脚本从端口流式传输数据,没有问题。我现在需要做的是获取数据流并将其转发到另一台计算机上的端口。我遇到了这样一个问题:

#!/usr/bin/python
from socket import *
bufsize = 1024 # Modify to suit your needs
targetHost = "192.1.1.2"
listenPort = 8788

def forward(data, port):
print "Forwarding: '%s' from port %s" % (data, port)
sock = socket(AF_INET, SOCK_DGRAM)
sock.bind(("localhost", port)) # Bind to the port data came in on
sock.sendto(data, (targetHost, listenPort))

def listen(host, port):
listenSocket = socket(AF_INET, SOCK_DGRAM)
listenSocket.bind((host, port))
while True:
    data, addr = listenSocket.recvfrom(bufsize)
    forward(data, addr[1]) # data and port

listen("localhost", listenPort)

但我不知道该把输出端口放在哪里。我拉数据的家庭服务器的IP是192.1.1.1,从端口8787流式传输数据。远程服务器的IP为192.1.1.2,正在监听端口8788。我不确定我需要将端口8787放在哪里,家庭服务器正从该端口提取数据。任何建议都会很有帮助。谢谢

如果您引用的最后一个代码在您的192.1.1.1上运行,您需要在最后一行调用
listen(“localhost”,8787)
,而不是
listen(“localhost”,listenPort)
,您应该会没事的
listenPort
是指数据转发到的服务器(192.1.1.2)正在侦听的端口,而
listen
需要当前机器(192.1.1.1)侦听输入的端口
listen
然后调用
forward
(告诉它使用相同的端口进行传出连接)。

如果您引用的最后一个代码在192.1.1.1上运行,您需要在最后一行调用
listen(“localhost”,8787)
,而不是
listen(“localhost”,listenPort)
,您应该没事
listenPort
是指数据转发到的服务器(192.1.1.2)正在侦听的端口,而
listen
需要当前机器(192.1.1.1)侦听输入的端口<代码>收听然后呼叫转发(告诉它使用同一端口进行传出连接)。

谢谢您回复我。现在我得到了这个错误:
error:[Errno 10048]每个套接字地址(协议/网络地址/端口)通常只允许使用一次
我可以使用这个吗
s.setsockopt(SOL\u SOCKET,SO\u REUSEADDR,1)
我不知道为什么在forward函数中有
sock.bind((“localhost”,port))
,请尝试删除它。您可能还想查看python文档中的。谢谢。现在它说数据还没有定义。我将转到您的链接,查看我在定义数据时缺少的内容。在定义数据时遇到问题。这就是我要的<代码>导入套接字端口=8787 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(“”,port))打印(“等待端口:”,port),而1:data,addr=s.recvfrom(1024)s.sendto(data,('192.168.1.100',8788))非常感谢您指出SOCK.bind的问题并给我链接。一旦我把它缩小到需要定义数据的范围,我就能够对它进行修改。谢谢谢谢你回复我。现在我得到了这个错误:
error:[Errno 10048]每个套接字地址(协议/网络地址/端口)通常只允许使用一次
我可以使用这个吗
s.setsockopt(SOL\u SOCKET,SO\u REUSEADDR,1)
我不知道为什么在forward函数中有
sock.bind((“localhost”,port))
,请尝试删除它。您可能还想查看python文档中的。谢谢。现在它说数据还没有定义。我将转到您的链接,查看我在定义数据时缺少的内容。在定义数据时遇到问题。这就是我要的<代码>导入套接字端口=8787 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(“”,port))打印(“等待端口:”,port),而1:data,addr=s.recvfrom(1024)s.sendto(data,('192.168.1.100',8788))非常感谢您指出SOCK.bind的问题并给我链接。一旦我把它缩小到需要定义数据的范围,我就能够对它进行修改。谢谢