在用 tcp 傳輸資料時,需要先建立連線,用三次握手建立傳輸資料的連線通道
其實是服務端端和客戶端各自都在準備資源。
在第二次和第三次、第三次和第四次之間會有超時等待。
乙個簡單的http伺服器
建立http伺服器, tcp
"""import socket
import re
def service_client(client_socket):
"""實現接收訊息和傳送訊息"""
# 接收客戶傳送過來的請求
request = client_socket.recv(1024).decode("utf-8")
print(">>>" * 20)
print(request)
# 將客戶端的請求變成列表
request_lines = request.splitlines()
print(request_lines)
# 使用正則取出客戶端請求的資料名稱
# 從中取出 /images/trolltech-logo.png
print("客戶端請求的資料是 %s" % ret.group(1))
# 根據客戶需求回送資料過去
response_status_line = "http/1.1 200 ok\r\n" # response status line 響應狀態行 http 必須大寫 換行是\r\n
space_line = "\r\n" # 響應頭和響應的資料之間有個空行
response_body = html_content # 傳送的內容
response_header = response_status_line + space_line
client_socket.send(response_header.encode("utf-8")) # 注意:響應頭是str格式,需要編碼
client_socket.send(response_body) # 響應的內容需要是位元組模式,不需要進行編碼傳送,瀏覽器會自動解析
# 關閉這個套接字
client_socket.close()
def main():
# 建立伺服器的套接字
tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)
tcp_server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1) # 可以讓埠重複使用
# 繫結本地資訊
tcp_server_socket.bind(("", 8888)) # 位址資訊放在元組中
# 將套接字變為監聽
tcp_server_socket.listen() # 最大的客戶端鏈結數為128
while true:
# 等待客戶端鏈結
new_socket, client_addr = tcp_server_socket.accept()
# 迴圈和客戶的進行通訊
service_client(new_socket)
# 關閉監聽套接字
tcp_server_socket.close()
if __name__ == '__main__':
main()
TCP三次握手 四次揮手
tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...
TCP三次握手 四次揮手
服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...
TCP三次握手四次揮手
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...