Socket编程:Web服务器
实验要求
用Python语言开发一个简单的Web服务器,它仅能处理一个请求。具体而言,Web服务器将:
1.当一个客户(浏览器)联系时创建一个连接套接字;
2.从这个连接接受HTTP请求;
3.解释该请求以确定所请求的特定文件
4.从服务器的文件系统获得请求的文件;
5.创建一个由请求的文件组成的HTTP响应报文,报文前面有首部行;
6.经TCP连接向请求的浏览器发响应。
如果浏览器请求一个在该服务器中不存在的文件,服务器应当返回“404 Not Found”差错报文。
Web服务器Socket编程代码
# import socket module
from socket import * # 导入python套接字编程的库
serverSocket = socket(AF_INET, SOCK_STREAM) # new一个TCP欢迎套接字
# Prepare a sever socket
serverSocket.bind(('', 1234)) # 将TCP欢迎套接字绑定到指定端口1234
serverSocket.listen(1) # 设置服务器最大连接客户机数目为1
# 主体程序:服务器和客户机进行信息的交互
while True:
# Establish the connection
print ('Ready to serve...')
connectionSocket, addr = serverSocket.accept(); # 建立一个TCP连接套接字,等待与客户端联系
try:
message = connectionSocket.recv(1024); # 当建立了联系(accept()后),获取客户发送的报文
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read(); # 从报文中读取信息
# Send one HTTP header line into socket
header = ' HTTP/1.1 200 OK
Connection: close
Connent-Type: text/html
Connent-Length: %d
' % (
len(outputdata))
connectionSocket.send(header.encode())
# Send the content of the requested file to the client(将 Web服务器请求到的网页 返还给客户机)
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
connectionSocket.close() # 关闭TCP连接套接字
except IOError:
# Send response message for file not found(如果连接建立失败:请求的文件找不到,则返回错误信息)
header = ' HTTP/1.1 404 Not Found'
connectionSocket.send(header.encode())
connectionSocket.close() # 关闭TCP连接套接字
serverSocket.close() # 关闭TCP欢迎套接字
客户机请求的网页
网页文件要和Web服务器代码文件放在同一个文件夹下面
<head> Hello World! </head>
开始实验
-
在Pycharm中打开Web服务器的代码运行
-
打开浏览器,在地址栏输入服务器代码中写入的端口号和之前的html文件
localhost:1234/HelloWorld.html
- 当在浏览器地址栏输入错误地址时会返回
404 Not Found