概述:静态网站是指全部由HTML(标准通用标记语言的子集)代码格式页面组成的网站,所有的内容包含在网页文件中。网页上也可以出现各种视觉动态效果,如GIF动画、FLASH动画、滚动字幕等,而网站主要是静态化的页面和代码组成,一般文件名均以htm、html、shtml等为后缀。
需求:使用tcp协议编写一个简单静态网页服务器,使用户可以通过浏览器访问所有的html网页(或博客);
tcp简介:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
python的socket套接字中就提供了tcp协议的使用,具体实现如下:
import socket
import redef 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()
访问效果如下:(访问的首页可点击进行静态网页跳转)