python——tcp协议实现简单的静态网站服务器

概述:静态网站是指全部由HTML(标准通用标记语言的子集)代码格式页面组成的网站,所有的内容包含在网页文件中。网页上也可以出现各种视觉动态效果,如GIF动画、FLASH动画、滚动字幕等,而网站主要是静态化的页面和代码组成,一般文件名均以htm、html、shtml等为后缀。

需求:使用tcp协议编写一个简单静态网页服务器,使用户可以通过浏览器访问所有的html网页(或博客);

简介:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

python的socket套接字中就提供了tcp协议的使用,具体实现如下;

python-TCP:

import socket import re def serverce_client(new_socket): """处理客户端到来的请求""" # 1 接受客户端请求,解堵塞 request = new_socket.recv(1024).decode("utf-8") print(request) request_lines = request.splitlines() print("") print(">"*20) print(request_lines) # 请求格式 GET /favicon.ico HTTP/1.1 # 根据请求格式建立正则 file_name = "" ret = re.match(r[^/]+(/[^ ]*),request_lines[0]) if ret: file_name = ret.group(1) print("-"*20, file_name) if file_name == /: file_name = /index.html # 2 返回消息给浏览器 # 2.1 返回消息分两部分,请求头和body,中间用空行分开 try: fp = open("./html"+ file_name,"rb") except: response_404 = "HTTP/1.1 404 NOT FOUND\r\n" response_404 += "\r\n" response_404 += "-----file not found -----" new_socket.send(response_404.encode("utf-8")) else: html_content = fp.read() fp.close() # 2.2 准备发送给浏览器的请求头 response_header = "HTTP/1.1 200 OK\r\n" response_header += "\r\n" # 2.3 header和body分别发送给请求的浏览器 new_socket.send(response_header.encode("utf-8")) new_socket.send(html_content) # 3 关闭处理的套接字 new_socket.close() def main(): """tcp协议实现静态浏览器""" # 1 创建一个socket套接字 tcp_server_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1) # 2 绑定一个端口 tcp_server_socket.bind(("",7890)) # 3 监听套接字 tcp_server_socket.listen(128) while True: # 4 等待客户端的链接 new_socket, clien_addr = tcp_server_socket.accept() # 5 为这个客户端服务 serverce_client(new_socket) # 6 关闭套接字 tcp_server_socket.close() if __name__ == "__main__": main()

在ubuntu中启动后通过ip和端口访问效果如下:

可点击网站页面进行对应页面跳转,具体说名代码中有对应注释;