经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
python静态web服务器实现方法及代码详解
来源:jb51  时间:2022/11/23 18:50:08  对本文有异议

1、编写TCP服务器程序。

2、获取浏览器发送的http请求消息数据。

3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器。

4、HTTP响应报文数据发送完成后,关闭服务于客户端的套接字。

实例

  1. # 时间: 2021/10/21 20:38
  2. import socket
  3. if __name__ == '__main__':
  4. # 创建tcp服务端套接字
  5. tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6. # 设置端口号复用, 程序退出端口立即释放
  7. tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
  8. # 绑定端口号
  9. tcp_server_socket.bind(("", 8080))
  10. # 设置监听
  11. tcp_server_socket.listen(128)
  12. while True:
  13. # 等待接受客户端的连接请求
  14. new_socket, ip_port = tcp_server_socket.accept()
  15. # 代码执行到此,说明连接建立成功
  16. recv_client_data = new_socket.recv(4096)
  17. # 对二进制数据进行解码
  18. recv_client_content = recv_client_data.decode)
  19. print(recv_client_content)
  20. # 响应行
  21. response_line = "HTTP/1.1 200 OK\r\n"
  22. # 响应头
  23. response_header = "Server: py1.0\r\n"
  24. # 响应体
  25. response_body = "Hello,guys!"
  26. # 拼接响应报文
  27. response_data = (response_line + response_header + "\r\n"+ response_body).encode()
  28. # 发送数据
  29. new_socket.send(response_data)
  30. # 关闭服务与客户端的套接字
  31. new_socket.close()

实例扩展:

  1. import socket
  2. import re
  3. import time
  4.  
  5.  
  6. def service_client(new_socket):
  7. """为这个客户端服务"""
  8.  
  9. # 1.接收浏览器发送过来的请求,即http请求
  10. # GET / HTTP/1.1
  11. # --------
  12. request = new_socket.recv(1024).decode('utf-8')
  13.  
  14. # 判断客户端意外断开链接返回空字符串
  15. if not request:
  16. # 关闭套接字并退出
  17. new_socket.close()
  18. print("==="*30)
  19. return
  20.  
  21. # 分隔套接字
  22. request_lines = request.splitlines()
  23. print()
  24. print(">"*20)
  25. print(request_lines)
  26.  
  27. file_name = ""
  28. ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
  29. if ret:
  30. file_name = ret.group(1)
  31. if file_name == "/":
  32. file_name = "/index.html"
  33.  
  34. # 2.返回http格式数据 给浏览器
  35. try:
  36. f = open("./html" + file_name, "rb")
  37. except:
  38. response = "HTTP/1.1 404 NOT FOUND\r\n"
  39. response += "Content-Type:text/html;charset=utf-8\r\n"
  40. response += "\r\n"
  41. response += "<h1>404 not found <br> 没有发现所请求资源</h1>"
  42. response += str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
  43. new_socket.send(response.encode('utf-8'))
  44. else:
  45. html_content = f.read()
  46. f.close()
  47. # 2.1准备发送给浏览器的数据---header
  48. response = "HTTP/1.1 200 OK\r\n"
  49. response += "\r\n"
  50. # 2.2准备发送给浏览器的数据 ---body
  51. # 将response header发送给浏览器
  52. new_socket.send(response.encode("utf-8"))
  53. # 将response body发送给浏览器
  54. new_socket.send(html_content)
  55.  
  56. # 关闭套接字
  57. new_socket.close()
  58.  
  59.  
  60. def main():
  61. """用来完成整体的控制"""
  62. # 1.创建套接字
  63. tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  64. # 端口复用
  65. tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  66. # 2.绑定
  67. tcp_server_socket.bind(("", 7890))
  68. # 3.变为套接字
  69. tcp_server_socket.listen(128)
  70.  
  71. while True:
  72. # 4.等待客户端的链接
  73. new_socket, client_addr = tcp_server_socket.accept()
  74.  
  75. print(client_addr)
  76.  
  77. # 5.为这个客户端服务
  78. service_client(new_socket)
  79.  
  80. # 关闭监听套接字
  81. tcp_server_socket.close()
  82.  
  83.  
  84. if __name__ == '__main__':
  85. main()

到此这篇关于python静态web服务器实现方法及代码详解的文章就介绍到这了,更多相关python静态web服务器如何实现内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号