【问题标题】:Python socket listening on port 80 not receiving data在端口 80 上侦听的 Python 套接字未接收到数据
【发布时间】:2018-11-25 11:39:29
【问题描述】:

我有这个程序,它现在应该只侦听端口 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

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

【问题讨论】:

    标签: python python-2.7 sockets http port80


    【解决方案1】:

    端口 80 和所有端口 s.bind(("127.0.0.1", 80)) 都会立即导致 PermissionError: [Errno 13] Permission denied 异常。

    我不确定 Windows 如何处理特权端口,但快速谷歌搜索指向 windows firewall messing with your program

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

    P.S.:几点建议:

    您可以跳过socket.gethostname()。如果您希望程序只能从您的机器访问,请使用 ip 127.0.0.1,如果您希望从网络上的任何机器访问,请使用 ip 0.0.0.0

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

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 1970-01-01
      • 2019-11-10
      • 2021-01-31
      • 2011-12-10
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多