from socket import *
def handle_client(client_socket):
"""爲一個客戶端服務"""
# 接收對方發送的數據
recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大字節數
# 打印從客戶端發送過來的數據內容
#print("client_recv:",recv_data)
request_header_lines = recv_data.splitlines()
for line in request_header_lines:
print(line)
# 返回瀏覽器數據
# 設置返回的頭信息 header
response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到這個資源
response_headers += "\r\n" # 空一行與body隔開
# 設置內容body
#response_body = "<h1>fat boss<h1>\r\n"
#response_body += "<h2>come on<h2>\r\n"
#response_body += "<h3>binlang!!!<h3>\r\n"
s=open('cc.html','r')
response_body=s.read()
# 合併返回的response數據
response = response_headers + response_body
# 返回數據給瀏覽器
client_socket.send(response.encode("utf-8")) #轉碼utf-8並send數據到瀏覽器
client_socket.close()
def main():
# 創建套接字
server_socket = socket(AF_INET, SOCK_STREAM)
# 設置當服務器先close 即服務器端4次揮手之後資源能夠立即釋放,這樣就保證了,下次運行程序時 可以立即綁定7788端口
server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 設置服務端提供服務的端口號
server_socket.bind(('', 7788))
# 使用socket創建的套接字默認的屬性是主動的,使用listen將其改爲被動,用來監聽連接
server_socket.listen(128) #最多可以監聽128個連接
# 開啓while循環處理訪問過來的請求
while True:
# 如果有新的客戶端來鏈接服務端,那麼就產生一個新的套接字專門爲這個客戶端服務
# client_socket用來爲這個客戶端服務
# server_socket就可以省下來專門等待其他新的客戶端連接while True:
client_socket, clientAddr = server_socket.accept()
handle_client(client_socket)
if __name__ == "__main__":
main()