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 时,它只接受客户端但似乎没有收到任何数据,尽管数据从其他地方成功发送。 .. 请帮助伙计们
端口 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 基本上已经死了。不要习惯两个的语法,你会在几年内重新学习它。
| 归档时间: |
|
| 查看次数: |
2438 次 |
| 最近记录: |