【问题标题】:How to get a file or a response from the server I just made如何从我刚刚创建的服务器获取文件或响应
【发布时间】:2021-01-17 14:06:42
【问题描述】:

我正在尝试通过 MichiganX 在 edX 上提供的课程来学习 Django。我的问题是课程跳过了一些细节,没有它们我无法让代码工作。

代码如下:

from socket import *
  def createServer():
  serversocket = socket(AF_INET, SOCK_STREAM)
  try:
      serversocket.bind(('localhost', 9000))
      serversocket.listen(5)
      while 1:
          (clientsocket, address) = serversocket.accept()

          rd = clientsocket.recv(5000).decode()
          pieces = rd.split('\n')
          if len(pieces) > 0:
              print(pieces[0])

          data = "HTTP/1.1 200 OK\r\n"
          data += "Content-Type: text/html; charset=UTF-8\r\n"
          data += "\r\n"
          data += "<html><body>Hello World</body></html>\r\n\r\n"
          clientsocket.sendall(data.encode())
          clientsocket.shutdown(SHUT_WR)
  except KeyboardInterrupt:
      print("\nShutting down...\n");
  except Exception as exc:
      print("Error:\n");
      print(exc)
  serversocket.close()


print('Access http://localhost:9000')
createServer()

我们还被告知要构建一个简单的网络浏览器,它将我们连接到我们构建的服务器,它应该返回“Hello World!”,它的代码如下所示:

 import socket

  mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  mysock.connect(('127.0.0.1', 9000))
  cmd = 'GET http://127.0.0.1/romeo.txt HTTP/1.0\r\n\r\n'.encode()
  mysock.send(cmd)

  while True:
      data = mysock.recv(512)
      if len(data) < 1:
          break
      print(data.decode(), end = '')

  mysock.close()

第一个问题是课程中没有提到 romeo.txt,它只是突然冒出来的。他们告诉我们只运行代码,但它什么也没做。我用谷歌搜索了如何启动服务器,所以在我的命令窗口中,我从服务器文件所在的目录启动了它,但是每当我尝试从代码中连接上面的网络浏览器(即使我删除“romeo.txt”)时,我都会收到错误 404。

我知道我遗漏了一些东西,我知道仅从我的文件所在的目录启动服务器是不够的,课程没有解释如何做,但为了在下一课中取得进展,我需要做它。谁能帮我?对不起,如果这个问题很愚蠢,但我已经被困了两个小时,我不知道我还能做什么。

【问题讨论】:

    标签: python http web-applications


    【解决方案1】:

    这两个程序正在创建套接字。
    第一个程序充当服务器,第二个程序充当客户端。第一个程序正在等待某人连接到它,如这一行serversocket.accept(),而第二个程序试图连接到服务器,如这一行mysock.connect(('127.0.0.1', 9000))
    您的问题是您在运行客户端时没有运行服务器。解决方案是先启动服务器,保持运行,然后启动客户端。
    它应该像这样在一个 cmd / 终端中工作:
    python server.py
    在其他 cmd/终端:
    python client.py
    将 server.py 和 client.py 替换为原始文件名。

    【讨论】:

    • 非常感谢,现在我知道如何运行服务器了,它的工作原理非常棒!
    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多