Python 如何从我刚刚创建的服务器获取文件或响应
我试图通过MichiganX在edX上提供的课程学习Django。我的问题是,课程跳过了一些细节,没有这些细节,我无法让代码正常工作 代码如下所示:Python 如何从我刚刚创建的服务器获取文件或响应,python,http,web-applications,Python,Http,Web Applications,我试图通过MichiganX在edX上提供的课程学习Django。我的问题是,课程跳过了一些细节,没有这些细节,我无法让代码正常工作 代码如下所示: from socket import * def createServer(): serversocket = socket(AF_INET, SOCK_STREAM) try: serversocket.bind(('localhost', 9000)) serversocket.listen(5)
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()
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()
从套接字导入*
def createServer():
serversocket=socket(AF\u INET,SOCK\u STREAM)
尝试:
绑定(('localhost',9000))
serversocket.listen(5)
而1:
(clientsocket,address)=serversocket.accept()
rd=clientsocket.recv(5000).decode()
碎片=rd.split(“\n”)
如果长度(件数)>0:
打印(件[0])
data=“HTTP/1.1 200正常\r\n”
数据+=“内容类型:文本/html;字符集=UTF-8\r\n”
数据+=“\r\n”
data+=“你好,世界\r\n\r\n”
clientsocket.sendall(data.encode())
clientsocket.关机(关机)
除键盘中断外:
打印(“\n按下…\n”);
除作为exc的例外情况外:
打印(“错误:\n”);
打印(exc)
serversocket.close()
打印('访问http://localhost:9000')
createServer()
我们还被告知构建一个简单的web浏览器,将我们连接到我们构建的服务器,它应该返回“Hello World!”,代码如下所示:
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()
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()
导入套接字
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect('127.0.0.1',9000))
cmd='GEThttp://127.0.0.1/romeo.txt HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)
尽管如此:
data=mysock.recv(512)
如果len(数据)<1:
打破
打印(data.decode(),end='')
mysock.close()
第一个问题是,课程中没有提到romeo.txt,它只是突然出现。他们告诉我们只运行代码,但它什么也没做。我用谷歌搜索了如何启动服务器,所以在我的命令windom中,我从我的服务器文件所在的目录启动了它,但每当我尝试从代码中连接上述web浏览器时(即使我删除了“romeo.txt”),我都会收到错误404
我知道我遗漏了一些东西,我知道仅仅从我的文件所在的目录启动服务器是不够的,第一课没有解释如何做,但为了在下一课中取得进展,我需要这样做。有人能帮我吗?对不起,如果这个问题很愚蠢,我已经被困了两个小时,我不知道还能做什么。这两个程序正在创建套接字。
第一个程序充当服务器,第二个程序充当客户端。第一个程序正在等待有人连接到它,如此行所示
serversocket.accept()
,而第二个程序尝试连接到服务器,如此行所示mysock.connect('127.0.0.1',9000))
您的问题是在运行客户端时没有运行服务器。解决方案是首先启动服务器,保持其运行,然后启动客户端。
它应该是这样工作的,在一个cmd/终端中:
python服务器.py
在其他命令/终端中:
python客户端.py
将server.py和client.py替换为原始文件名。非常感谢,现在我知道如何运行服务器了,它工作起来很有魅力!