python - 如果它很忙,请更改端口 80
问题描述
我有一个任务是使用 LAN 在 TCP 上创建一个 Web 服务器,该项目是在端口 80 上向 localhost 发出请求,并在浏览器中显示“hi”,如果请求错误,则显示“404 not found”,我有一个问题是端口 80 很忙,当使用除 80 之外的任何端口时它都会停止工作,分配的提示是“如果您在已经运行 Web 服务器的主机上运行您的服务器,那么您应该使用与您的 Web 服务器的端口 80 不同的端口。” 我的代码是:
from socket import *
import os
def test():
serverPort = 80
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print("web server on port", serverPort)
while True:
print("ready to serve")
connectionSocket, addr = serverSocket.accept()
try:
message = connectionSocket.recv(1024)
print(message)
filename = message.split()[1]
print(filename[1:])
print(filename, '||', filename[1])
f = open(filename[1:])
outputdata = f.read()
connectionSocket.send(outputdata.encode())
connectionSocket.close()
except Exception:
print("404 Not Found")
connectionSocket.send("""404 Not Found\r\n""".encode())
pass
pass
if __name__ == "__main__":
test()
解决方案
只需检查端口是否已在使用中
def check(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', serverPort)) == 0
推荐阅读
- openssl - OpenSSL 总是生成 v1 csr 文件而不是 v3
- mvvm - 嵌套 recyclerview 和 LiveData 观察的问题
- ios - 如何从一章过渡到另一章?
- flutter - Flutter 函数使用 Firebase 返回空列表
- javascript - 会话 cookie 只用 Java Script 播放声音一次
- android - DynamoDB 嵌套项目插入 Android
- unity3d - 刚体 2D 不会停止
- javascript - 如何在 JavaScript 中的每个 for 循环迭代之间暂停
- node.js - Nest 无法解析 JobsService (?) 的依赖关系。请确保索引 [0] 处的参数 JobModel 在 AppModule 上下文中可用
- python - Python Socket 多个客户端 - 聊天应用程序