sockets - Socket编程:设置服务器,端口为80则运行,端口为其他则无法运行
问题描述
我正在尝试使用以下代码使用 Python 套接字编程设置服务器:
from socket import *
serverPort = 80
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(("", serverPort))
serverSocket.listen(1)
print ("The server is ready to receive")
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()
当我使用此代码并尝试localhost
在 Web 浏览器中输入时,我得到的响应没有任何问题,如图所示。
但是,当我将代码中的第 3 行更改为serverPort = 12000
并尝试输入localhost:12000
时,我没有得到响应。
注意:我使用的是 Windows 而不是 Linux,我在 PyCharm 2020.3.3 上运行 Python 代码。
解决方案
无论使用什么端口,这两个示例都不应该正常工作,因为服务器没有像错误消息所说的那样发回有效的 HTTP 响应。第一个示例“有效”的事实是侥幸。
试试这个:
from socket import *
serverPort = 80
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(("", serverPort))
serverSocket.listen(1)
print ("The server is ready to receive")
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
reply = "HTTP/1.0 200 OK\r\nConnection: close\r\n\r\n"
connectionSocket.send(reply.encode()) # <-- add this!
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()
推荐阅读
- css - 覆盖 PrimeNG 步骤组件样式
- css - FullCalendar 调度程序,fullcalendar.print.css 的问题
- c - 静态 C 库中的选择性变量定义
- javascript - 在对象数组中查找重复的集合值
- python - 烧瓶、wsgi 和部署
- php - 我的分页在 codeigniter 控制器中不起作用
- c# - C# Directory.GetCurrentDirectory() 返回带有 NUnit 的 system32
- javascript - 如何将时间/日期戳附加到 html 文件中的文件名
- c# - HoloLens 无法通过 BT 和 TCP 发送或接收数据
- python - Pytorch 保存模型用户警告:无法检索网络类型容器的源代码