黑马程序员Python进阶教程快速搭建Web服务器笔记
应用层 解决要传什么数据 传输层 解决如何传输数据 udp tcp 可以理解为快递公司 网络层 IP可以理解为地理位置 链路层 具体的传输工具
传输层(tcp部分): 服务器 Socket = socket.socket() 1:Socket.bind()绑定 Socket.listen()监听 3:cli_so=Socket.accept()接收 So.send() So.recv() 客户端 So=socket.socket() 2:So.connect()连接 So.send() So.recv() close 三次握手:connect -->(seq=1) <–(ack=2,seq=1) -->( ack=2,seq=2) accept 四次挥手:
应用层协议:ftp ssh smtp pop3 Http
一个简单的html文件 first.html
ItCast
<htm>
<head>
<title>ItCast</title>
<body>
<h1 style="color: blueviolet;">hello world</h1>
<p>hi</p>
<script type="text/javascript">
alert("hello");
</script>
</body>
</htm>
包括了html css js
HTTP请求方式 GET 获取数据 POST 修改数据 PUT 保存数据 DELETE 删除数据 OPTION 询问服务器的某种支持特性 HEAD 返回报文头
HTTP是无状态的
URI包含(URL,URN) URL L=location URN N=name
固定返回值的web服务器代码
import socket
from multiprocessing import Process
HTML_ROOT_DIR=""
def handle_client(client_socket):
"""处理客服端请求"""
request_data = client_socket.recv(1024)
print(request_data)
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "server:My server\r\n"
response_body = "hello chenfangyu"
response = response_start_line + response_headers + "\r\n" + response_body
print("response data:", response)
client_socket.send(bytes(response,"utf-8"))
client_socket.close()
if __name__=="__main__":
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("", 8000))
server_socket.listen(128)
while True:
client_socket, client_address = server_socket.accept()
print("[%s,%s]用户连接上了" %client_address)
handle_client_process = Process(target=handle_client, args=(client_socket,))
handle_client_process.start()
client_socket.close()
|