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

时间:2018-11-25 11:39:29

标签: python python-2.7 sockets http port80

我有这个程序,现在应该只监听端口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时,尽管数据已成功从其他地方发送,但它仅接受客户端,但似乎未接收任何数据。 .. 请帮助你们

1 个答案:

答案 0 :(得分:1)

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

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

适当的Web服务器(例如Nginx或Apache)以root身份启动,绑定到端口80,然后立即转为特权较低的用户,因为在root环境下运行很危险。

P.S .:一些建议:

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

您应该尝试尽快切换到Python 3,因为Python 2在这一点上已经基本失效。不要习惯于二的语法,您将在几年的学习中重新学习它。