我一直在努力学习如何在python中使用Telnet,我只是陷入困境。 重要的是 - 我对这个主题的任何内容都不了解。 IP,telnet,套接字..什么都没有.. 让我们说这是我的服务器:
import socket
import sys
HOST = ''
PORT = 8886
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
try:
s.bind((HOST, PORT))
except socket.error , msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
s.listen(10)
print 'Socket now listening'
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
print 'sending msg'
conn.sendall('My name is: ')
print 'msg sent'
data = conn.recv(1024)
print data
x="Hello %s and Thank you for your help! :)"%data
conn.sendall(x)
conn.close()
s.close()
现在这只是测试的基本内容.. 我试图创建一个从远处的地方连接到服务器的客户端,所以我无法使用localhost。 这就是我设法做到的:
import socket
import sys
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('85.65.110.8',8886))
data= sock.recv(1024)
lol=raw_input(data)
sock.sendall(lol)
data = sock.recv(1024)
print data
time.sleep(3)
sock.close()
IP 85.65.110.8是我从whatismyip.com发现的 - 它甚至不能在我自己的计算机上工作。
我尝试了IP 192.168.0.100,它可以在局域网上工作,但不能从我的朋友家(正在测试它)和'localhost'工作(仍然来自我,但不是来自我朋友的家)
我怎么能改变这个,以便我的朋友可以连接到服务器?
谢谢 :)
(我的防火墙已经关闭,我已经移植了......我想...我希望如此......)
答案 0 :(得分:1)
如果它适用于内部IP(192.168.xx),但不适用于外部IP(来自whatsmyip,但记住它可以在没有警告的情况下随时更改),那么几乎可以肯定是防火墙或端口转发问题
遗憾的是,您的帖子中没有足够的信息对其进行故障排除(防火墙在任何情况下都使用SuperUser而不是StackOverflow。)
答案 1 :(得分:0)
您可能有一些路由器连接到互联网
所以85.65.110.8
是此路由器的外部地址。
在路由器上,您必须使用port forwarding
或virtual server
并设置连接router 8886 <=> 192.168.0.100 8886
当有人尝试连接到85.65.110.8 8886
时,路由器会将此信息发送给192.168.0.100 8886
,并会从192.168.0.100 8886
发回所有答案
如果Internet提供商阻止某些端口(例如8886
),请使用80
它是Web服务器端口。 (router 80 <=> 192.168.0.100 8886
)。
然后,您的朋友必须连接到85.65.110.8 80
,但您的服务器将在端口8886
上运行。
如果互联网服务提供商每天更改您的IP,则您需要http://no-ip.com或http://dyndns.com。
您的朋友可以使用telnet
来测试您的端口 - 或更专业的内容,例如nmap或other port scanning tools