侦听端口 80 的 Python 套接字未接收数据

0 python sockets http port80 python-2.7

我有这个程序,它现在应该只侦听端口 80 并从浏览器连接或其他 python 脚本接收数据。这段代码:

import socket               # Import socket module

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname() # Get local machine name
port = 80              # Reserve a port for your service.
s.bind(("192.168.252.7", port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   print c.recv(1024)
   c.close()                # Close the connection
Run Code Online (Sandbox Code Playgroud)

这都是从tutorialspoint复制的。此代码接收数据,当端口设置为 80 以外的任何内容时(例如 8080、12345),但是当它设置为 80 时,它只接受客户端但似乎没有收到任何数据,尽管数据从其他地方成功发送。 .. 请帮助伙计们

And*_*zko 5

端口 80 和所有小于 1024 的端口都是特权端口,您的程序必须以 root 身份运行才能正确绑定到这些端口。我猜你在 Windows 上运行,因为在任何 unix 调用上都会立即s.bind(("127.0.0.1", 80))导致PermissionError: [Errno 13] Permission denied异常。

我不确定 Windows 如何处理特权端口,但快速谷歌搜索指向Windows 防火墙与您的程序混淆

适当的 Web 服务器,例如 Nginx 或 Apache,以 root 身份启动,绑定到端口 80 并立即下降到特权较低的用户,因为在 root 下运行是危险的。

PS:几点建议:

您可以跳过socket.gethostname(). 使用IP 127.0.0.1,如果你希望你的程序可以访问只能从你的机器,或者使用IP 0.0.0.0,如果你想从任何计算机访问您的网络。

您应该尝试尽快切换到 Python 3,因为此时 Python 2 基本上已经死了。不要习惯两个的语法,你会在几年内重新学习它。