簡體   English   中英

Telnet 到 Python 服務器卡住了

[英]Telnet to Python server gets stuck

我正在准備一個演示,我想為它使用一個簡單的服務器,而不是 nginx 或任何其他流行的服務器。

我從 python 官方頁面得到了以下內容:

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

所以,我運行它,一切似乎都很好:

python -m SimpleHTTPServer 8000

如果我去瀏覽器,或卷曲 IP 地址,它工作得很好:

xx.xx.xx.xx - - [31/May/2019 09:36:33] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:43] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:37:46] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:03] "HEAD / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:06] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:12] "GET / HTTP/1.1" 200 -
xx.xx.xx.xx - - [31/May/2019 09:39:13] "GET / HTTP/1.1" 200 -

現在,當我通過telnet連接到服務器並執行GET ,服務器卡住了:

$ telnet xx.xx.xx.xx 8000
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
GET / HTTP/1.1
...It just hangs here foever...

當我在服務器上按ctrl+c時,它向我顯示了發生的異常,我不知道如何在這種情況下解釋:

^C----------------------------------------
Exception happened during processing of request from ('xx.xx.xx.xx', 47346)
Traceback (most recent call last):
  File "/usr/lib/python3.5/socketserver.py", line 313, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python3.5/socketserver.py", line 341, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python3.5/socketserver.py", line 354, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python3.5/socketserver.py", line 681, in __init__
    self.handle()
  File "/usr/lib/python3.5/http/server.py", line 422, in handle
    self.handle_one_request()
  File "/usr/lib/python3.5/http/server.py", line 400, in handle_one_request
    if not self.parse_request():
  File "/usr/lib/python3.5/http/server.py", line 334, in parse_request
    _class=self.MessageClass)
  File "/usr/lib/python3.5/http/client.py", line 206, in parse_headers
    line = fp.readline(_MAXLINE + 1)
  File "/usr/lib/python3.5/socket.py", line 576, in readinto
    return self._sock.recv_into(b)
KeyboardInterrupt
----------------------------------------

我還通過 SSH 連接到運行服務器的同一台機器,並執行連接到本地主機的請求。 也掛了。

我想知道:

  1. telnet GET 與其他 GET 有何不同。
  2. 在python服務器級別,異常是什么意思,以及如何解決。
  1. telnet GET 與其他 GET 有何不同。

telnet在這里沒有什么不同。 您的服務器正在掛起,因為它正在等待您完成 GET 請求的輸入。 為此,您只需在輸入 GET 請求后按Enter兩次。

這是因為:

  • 一個CR-LF字符是必需的,以結束的HTTP請求的消息報頭部分(如指定此處
  • 另一個是實際的CR-LF ,它告訴telnet您已完成輸入
  1. 在python服務器級別,異常是什么意思,以及如何解決。

這只是您按Ctrl + C ,從而中斷了運行SimpleHTTPServer的 Python 進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM