【问题标题】:Socket Programming: Setup server, it runs if port is 80, but cannot run if port is otherSocket编程:设置服务器,端口为80则运行,端口为其他则无法运行
【发布时间】:2021-08-09 21:47:50
【问题描述】:

我正在尝试使用 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 时,我得到的响应没有任何问题,如图所示。

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

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

【问题讨论】:

  • 请勿在此处发布链接或文字图片。发布文本。
  • 我只是试图以最好的方式解释问题.. 下次我会使用文字

标签: sockets websocket localhost webserver serversocket


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-02-19
    • 2021-09-16
    • 2013-09-16
    • 2023-03-25
    • 2021-06-05
    • 2019-03-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多