Python客户端服务器

时间:2014-07-04 09:41:37

标签: python ip client telnet

我一直在努力学习如何在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'工作(仍然来自我,但不是来自我朋友的家) 我怎么能改变这个,以便我的朋友可以连接到服务器? 谢谢 :) (我的防火墙已经关闭,我已经移植了......我想...我希望如此......)

2 个答案:

答案 0 :(得分:1)

如果它适用于内部IP(192.168.xx),但不适用于外部IP(来自whatsmyip,但记住它可以在没有警告的情况下随时更改),那么几乎可以肯定是防火墙或端口转发问题

遗憾的是,您的帖子中没有足够的信息对其进行故障排除(防火墙在任何情况下都使用SuperUser而不是StackOverflow。)

答案 1 :(得分:0)

您可能有一些路由器连接到互联网
所以85.65.110.8是此路由器的外部地址。

在路由器上,您必须使用port forwardingvirtual 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.comhttp://dyndns.com

您的朋友可以使用telnet来测试您的端口 - 或更专业的内容,例如nmapother port scanning tools