###协程版
import gevent
import socket
import time
from gevent import monkey
monkey.patch_all()
class ServerTcpSocket(object):
#初始化方法定义socket
def __init__(self):
self.server_tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#绑定端口
self.server_tcp_socket.bind(("", 8080))
#开启端口复用
self.server_tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
#开启监听
self.server_tcp_socket.listen(128)
#创建程序start方法
def startsystem(self):
#循环创建new_socket
while True:
new_socket, port_ip = self.server_tcp_socket.accept()
#创建协程
ms = gevent.spawn(self.sendrecv, new_socket)
ms.join()
#创建sendrecv方法
def sendrecv(self, new_socket):
#接收用户的数据
clent_data = new_socket.recv(1024).decode("utf-8")
#防止浏览器退出
if len(clent_data) == 0:
print("浏览器退出")
new_socket.close()
return
#生成数据list
user_list = clent_data.split(" ", maxsplit=2)
#拿到用户请求的资源地址
user_tcp_path = user_list[1]
#防止用户不输地址报错
print(user_tcp_path)
if user_tcp_path == "/":
user_tcp_path = "yan.html"
try:
with open("./"+user_tcp_path, "rb") as file:
file_data = file.read()
except Exception as e:
with open("404.html", "rb") as file:
file_data = file.read()
new_socket.send(("HTTP/1.1 404 not find\r\n" + "Server: nbweb\r\n"+"\r\n").encode("utf-8") + file_data)
else:
new_socket.send(("HTTP/1.1 200 OK\r\n"+"Server: nbweb\r\n"+"\r\n").encode("utf-8")+file_data)
time.sleep(0)
#定义主方法
def main():
server1 = ServerTcpSocket()
server1.startsystem()
if __name__ == '__main__':
main()
网友评论