首页 > 解决方案 > 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 浏览器中输入时,我得到的响应没有任何问题,如图所示。

端口为 80 时的浏览器窗口

但是,当我将代码中的第 3 行更改为serverPort = 12000并尝试输入localhost:12000时,我没有得到响应。

如果端口不是 80,浏览器窗口

注意:我使用的是 Windows 而不是 Linux,我在 PyCharm 2020.3.3 上运行 Python 代码。

标签: socketswebsocketlocalhostwebserverserversocket

解决方案


无论使用什么端口,这两个示例都不应该正常工作,因为服务器没有像错误消息所说的那样发回有效的 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()

推荐阅读