socket 練習
阿新 • • 發佈:2018-12-09
鏈路層 命令 情況 sed con 機器 col 鏈路 exc
1、什麽是C/S架構?
C指的是client(客戶端軟件),S指的是Server(服務端軟件)
2、互聯網協議是什麽?分別介紹五層協議中每一層的功能?
互聯網協議:計算機界的英語 OSI七層: 應用層 表示層 會話層 傳輸層 網絡層 數據鏈路層 物理層 TCP/IP四層/五層: 應用層 應用層 :軟件 qq 暴風 傳輸層 傳輸層 :建立端口到端口的通信 0-65535 0-1023為系統占用端口 tcp ucp 網絡層 網絡層 :ip+mac 能找到全世界唯一的計算機 ip:找到哪一個局域網 mac:找到那一臺機器 數據鏈路層 接口層 :定義電信號的分組方式 物理層 :發送01010101...電信號
3、基於tcp協議通信,為何建立鏈接需要三次握手,而斷開鏈接卻需要四次揮手
三次握手:client請求,server同意請求, client同意 四次揮手:client請求,server同意,server請求,client同意 因為:server有可能還有數據要發送
4、為何基於tcp協議的通信比基於udp協議的通信更可靠?
tcp: 可靠 對方給了確認收到信息,才發下一個,如果沒收到確認信息就重發 udp: 不可靠 一直發數據,不需要對方回應
5、?流式協議指的是什麽協議,數據報協議指的是什麽協議?
流式協議:TCP協議,可靠傳輸 數據報協議: UDP協議,不可傳輸
6、什麽是socket?簡述基於tcp協議的套接字通信流程
Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。 socket == 片面說: ip + 端口 服務端:socket(),bind()綁定,listen()激活,accept(),recv(),send(),close() 客戶端:socket(),connect(),send(),recv(),close()
7、什麽是粘包? socket 中造成粘包的原因是什麽? 哪些情況會發生粘包現象?
粘包:數據粘在一起,主要因為:接收方不知道消息之間的界限,不知道一次性提取多少字節的數據造成的 數據量比較小,時間間隔比較短,就合並成了一個包,這是底層的一個優化算法(Nagle算法)
8、基於socket開發一個聊天程序,實現兩端互相發送和接收消息
server
import socket chart = socket.socket(socket.AF_INET, socket.SOCK_STREAM) chart.bind(("127.0.0.1", 8080)) chart.listen(5) while True: # 循環鏈接 conn, addr = chart.accept() # 返回的是元組(客戶端的信息,ip和端口號) while True: # 通訊循環 try: data = conn.recv(8096).decode("utf-8") # if not data: break # 僅適用於Linux操作系統(客戶端斷開),win 用try...except print(data) while True: msg = input(">>:").encode("utf-8") if 0 < len(msg) <= 8096: conn.send(msg) break else: print("文字太長") except ConnectionRefusedError: break
client
import socket chart = socket.socket(socket.AF_INET, socket.SOCK_STREAM) chart.connect(("127.0.0.1", 8080)) while True: while True: msg = input(">>:").encode("utf-8") if 0 < len(msg) <= 8096: chart.send(msg) break else: print("文字太長") data = chart.recv(8096).decode("utf-8") print(data)
9、基於tcp socket,開發簡單的遠程命令執行程序,允許用戶執行命令,並返回結果
socket 練習