2012-07-05 77 views
6

我可以做简单的插座中使用同一台机器上的通信是否有使用python进行端口转发的简单描述?

服务器:

import socket 

s = socket.socket() 
host = socket.socket() 
port = 8000 
s.bind((host,port)) 
s.listen(5) 
while true: 
    c,addr = s.accept() 
    print 'got connection from', addr 
    c.send('thank you for connecting') 
    c.close() 

客户端:

import socket 

s = socket.socket() 
host=socket.gethostname() 
port = 8000 
s.connect((host,port)) 
print s.recv(1024) 

什么样的变化将需要做出有这样的我的笔记本电脑和一间沟通我工作的私人服务器?我从我的搜索中发现,portforwarding是解决这个问题的最好方式,但没有找到任何有关如何解决这个问题的解释或教程。

谢谢

+0

'主机= socket.socket()'可能是一个复制粘贴错误 – jfs 2012-07-05 18:22:03

+0

我不知道如何转发端口,因此我不确定是否会可行的。我会尝试任何方法在这一点上。 – user1340048 2012-07-05 18:31:24

+1

为什么不能在客户端代码中使用'host ='your server''? – jfs 2012-07-05 19:12:59

回答

1

如果你关心的Python端口转发实施,有只使用Python标准库(插座,asyncore)实现异步端口转发服务器的古老而伟大的ActriveState配方。你可以拨打code.activestate.com

P.S. 还有一个链接到脚本的线程版本。

2

如果你并不真的需要做到这一点的蟒蛇,只要使用的netcat: -

http://netcat.sourceforge.net/

端口转发或端口映射 在Linux上,netcat能用端口转发。以下九种不同的方式做NetCat的端口转发(c开关不支持,虽然 - 用的netcat的“NCAT”化身这些工作): - http://en.wikipedia.org/wiki/Netcat#Port_Forwarding_or_Port_Mapping

它通常是因为:

nc -l -p port1 -c ' nc -l -p port2' 
nc -l -p port1 -c ' nc host2 port2' 
nc -l -p port1 -c ' nc -u -l -p port2' 
nc -l -p port1 -c ' nc -u host2 port2' 
nc host1 port1 -c ' nc host2 port2' 
nc host1 port1 -c ' nc -u -l -p port2' 
nc host1 port1 -c ' nc -u host2 port2' 
nc -u -l -p port1 -c ' nc -u -l -p port2' 
nc -u -l -p port1 -c ' nc -u host2 port2' 

来源标准对大多数* nix分布,也有一个Win32的移植: -

http://www.stuartaxon.com/2008/05/22/netcat-in-windows/

相关问题