1.用到的python模块
socket(网络通信), multiprocessing(多进程), re(正则表达式)
2.使用工具 pycharm, 项目结构如下图
3. 服务器端的 静态资源index.html 如下所示:
4.执行staticFile_server.py ,然后在浏览器访问 服务器绑定的ip和端口 (localhost, 8090), 结果如图:
5. 源码送上:
import socket
from multiprocessing import Process
import re
#静态资源根目录
HTML_ROOT_DIR = "./staticFiles"
#处理用户请求的函数
def del_request(client_socket):
"""处理用户请求的函数"""
request_data = client_socket.recv(1024)
# print(request_data.decode("utf-8"))
# 从request_data中提取用户请求的 静态资源
request_lines = request_data.decode("utf-8").splitlines()
# for request_line in request_lines:
# print(request_line)
request_pageUrl = re.match(r"\w+ +(/[^ ]*) ", request_lines[0]).group(1)
print(request_pageUrl)
#读取请求静态资源的
file = open(HTML_ROOT_DIR + request_pageUrl, "rb");
#此处应该判断后缀名 img 或者 mv ?
request_file_data = file.read().decode("utf-8")
print(request_file_data)
# 编写服务器对浏览器的响应信息
# 1.响应起始行
response_start_line = "HTTP/1.1 200 OK\r\n"
# 2.响应头
response_headers = "server: myserver\r\n"
# 3.响应体
response_body = request_file_data
response = response_start_line + response_headers + "\r\n" + response_body
# print(response)
#发送响应信心,并关闭client_socket 等待下次请求再次开启
client_socket.send(bytes(response, "utf-8"))
client_socket.close()
# main 函数
if __name__ == "__main__":
#创建服务器
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#服务器需绑定ip(本机则可以为"")和端口号
server_bind_detail = ("", 8090)
server_socket.bind(server_bind_detail)
#链接最大数
server_socket.listen(88);
while(True):
try:
client_socket,addr_client_socket = server_socket.accept()
p = Process(target=del_request, args=(client_socket,))
print("[%s,%s] 已链接服务器!"%addr_client_socket)
p.start()
#因为client_socket已经放入到del_request里面,所以这里可以关闭了
client_socket.close()
except:
server_socket.close()
print("服务器异常关闭!")
break
7. 如果问题,敬请留言!