- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经有一个非常相似的帖子,但我越来越沮丧,因为我的网络设置似乎没有问题。从外面可以看到其他软件(netcat 监听服务器等),但看不到我的脚本。这怎么可能??注意:它适用于 LAN,但不适用于 Internet。
服务器:
import socket
host = ''
port = 80001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
print 'Listening..'
conn, addr = s.accept()
print 'is up and running.'
print addr, 'connected.'
s.close()
print 'shut down.'
客户:
import socket
host = '80.xxx.xxx.xxx'
port = 80001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.close()
有人请帮助我。
非常感谢任何帮助。
jack
最佳答案
再次编辑添加:
我认为您可能缺少套接字通信的一些基础知识。为了让套接字正常工作,您需要确保客户端和服务器上的套接字都能满足。使用最新版本,您的服务器现在绑定(bind)到端口 63001,但在本地环回适配器上:127.0.0.1
计算机有多个网络适配器,至少有 2 个:一个是本地环回,它允许您以快速、高效的方式(用于测试、ipc 等)与同一台机器建立网络连接,还有一个网络适配器让您连接到实际网络。许多计算机可能有更多的适配器(用于 vlan 的虚拟适配器、无线与有线适配器等),但它们至少有 2 个。
因此在您的服务器应用程序中,您需要指示它将套接字绑定(bind)到正确的网络适配器。
host = ''
port = 63001
bind(host,port)
这在 python 中的作用是将套接字绑定(bind)到环回适配器(或 127.0.0.1/localhost)。
在您的客户端应用程序中,您有:
host = '80.xxx.xxx.xxx'
port = 63001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
现在您的客户端尝试做的是连接到 80.xxx.xxx.xxx(这是您的无线互联网适配器)上的端口 63001 的套接字。
由于您的服务器正在监听您的环回适配器,而您的客户端正在尝试连接您的无线适配器,因此它失败了,因为两端不相交。
所以这里有两个解决方案:
通过host = 127.0.0.1
更改客户端连接到localhost
更改服务器以通过更改 host = 80.xxx.xxx.xxx
绑定(bind)到您的 Internet 适配器
现在第一个解决方案,使用本地主机,只有当你的服务器和客户端在同一台机器上时才有效。无论您尝试使用什么机器,本地主机总是指向自身(因此回环)。因此,如果/当您决定将您的客户端/服务器连接到互联网时,您将必须绑定(bind)到互联网上的网络适配器。
编辑添加:**
好的,您的最新修订版仍然无法正常工作,因为 65535
是可用的最大帖子。
下面的答案是对问题的原始修订。
在您发布的代码中,您正在监听(绑定(bind))端口 63001
,但您的客户端应用程序正在尝试连接到端口 80
。这就是为什么您的客户端无法与您的服务器通信的原因。您的客户端需要使用端口 63001
而不是端口 80
进行连接。
此外,除非您正在运行 HTTP 服务器(或者您的 Python 服务器将处理 HTTP 请求),否则您真的不应该绑定(bind)到端口 80
。
在您的客户端代码更改中:
import socket
host = '80.xxx.xxx.xxx'
port = 63001
在你的服务器代码中:
import socket
host = ''
port = 63001
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostbyname(socket.gethostname()), port ))
关于python - 让 Python 套接字对外界可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3112980/
我是一名优秀的程序员,十分优秀!