【问题标题】:Python client serverPython客户端服务器
【发布时间】:2014-07-05 00:08:19
【问题描述】:

我一直在尝试学习如何在 python 中使用 Telnet,但我遇到了一些问题。 重要的是-我对这个主题一无所知。 IP,telnet,sockets..什么都没有.. 假设这是我的服务器:

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,它可以在 LAN 上工作,但不能来自我朋友的房子(正在测试它),并且“localhost”也可以工作(仍然来自我,但不是来自我朋友的房子) 我该如何更改此设置,以便我的朋友可以连接到服务器? 谢谢 :) (我的防火墙已关闭,我转发了端口.. 我想...我希望如此...)

【问题讨论】:

  • 您的系统上应该有程序telnet (telnet.exe),这样您就可以使用它来测试您的服务器 - 使用终端/cmd.exe 和命令telnet localhost 8886(或您的朋友@987654326 @)。顺便说一句:您的 Internet 提供商可以拥有自己的防火墙,并且它可以每天更改您的 IP。
  • 我尝试使用 CMD,但当我尝试连接时,服务器似乎仍然没有响应..

标签: python ip client telnet


【解决方案1】:

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

不幸的是,您的帖子中没有足够的信息来解决它(无论如何,防火墙都会使用 SuperUser 而不是 StackOverflow)。

【讨论】:

  • 问题是使用外部 IP 我什至无法连接到我自己的计算机.. 嗯,我只是注意到我没有进行端口转发,而是做了一些叫做“虚拟服务器”之类的东西.. .是一样的吗?...
【解决方案2】:

您可能有一些路由器可以连接到互联网
所以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
它是网络服务器端口。 (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

【讨论】:

  • 不确定我是否真的成功了。这是我得到的端口转发屏幕:puu.sh/9WIJ6/75a1246075.png 什么是“路由器 80”?根据端口转发屏幕你能告诉我在每个地方写什么吗?谢谢!
  • router 80 表示IP:actual_external_ip PORT:80(当时表示85.65.110.8 80) - 我在路由器中有高级配置。我看到图像 - telnet1 可以,telnet2 没用。现在使用telnet1,您可以转发85.65.110.8 8880 <=> 192.168.0.100 8880,因此您必须将telnet1 中的两个端口更改为8886,或者在您的服务器中使用端口8880。现在你可以运行服务器(使用端口8880),朋友可以尝试连接到85.65.110.8 8880
  • 所以我将服务器端口更改为 8880,但它仍然不起作用.. 我不知道为什么.. 当我运行客户端时,它甚至没有连接.. 如您所见服务器将在客户端连接到它后立即打印,它只是什么都不做..它甚至没有结束程序它只是在运行并且什么都不做..有什么我可以提供的信息以便您理解问题好点了吗?
  • 再次运行服务器(使用端口8880)并尝试telnet localhost 8880。行得通吗?然后检查你是否还有外部IP85.65.110.8。然后再次运行服务器并尝试telnet 85.65.110.8 8880。有用吗?
  • 用端口 8880 运行.. localhost 运行良好(我正在逐步执行客户端脚本以查看是否有任何问题)检查并且我的外部 IP 仍然是 85.65.110.8 再次运行,尝试一步一步使用 85.65.110.8。当我尝试连接时它没有抛出任何错误,但是当我到达 data=sock.recv(1024) 它开始运行并且什么都不做......只是一个空白......过了一会儿它完成并且数据没有任何内容它..puu.sh/9WQqH/0571ab8cbb.png
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 2013-06-10
  • 2018-06-24
  • 2021-01-31
  • 2015-06-27
相关资源
最近更新 更多