python 网络编程--socket模块/struct模块
socket模塊:
客戶端:CS架構,? client -> server
瀏覽器:BS架構,? browser -> server
?
網絡通信本質:傳輸字節
doc命令查看ip地址:ipconfig / ifconfig(windows系統 / mac系統)
?
tcp協議和udp協議
TCP(Transmission Conteol Protocol)可靠的,面向連接的協議(eg打電話),傳輸效率低全雙工通信(發送緩存&接收緩存),面向字節流.使用TCP的應用:Web瀏覽器;電子郵件,文件傳輸程序.
UDP(User Datagram Protocol)不可靠的,無連接的服務,傳輸效率高(發送前延時小),一對一,一對多,多對一,多對多,面向報文,盡最大努力服務,無擁塞控制.使用UDP的應用:域名系統(DNS);視頻流;IP語音(VoIP).
服務端:
import socket# 創建服務端socket對象 server = socket.socket()
# 綁定IP和端口 server.bind(('192.168.13.88',5001))
# 后邊可以等5個人 server.listen(5)while 1:
conn,addr = server.accept() # 等待客戶端來連接,如果沒人來就傻傻的等待。
#字節類型while 1:data = conn.recv(1024) # 一次性最多拿1024字節。if data == b"exit":breakresponse = data + b'在北京'conn.send(response) # 服務端通過連接對象給客戶端回復了一個消息。conn.close() # 與客戶端斷開連接
客戶端:
import socket# 創建服務端socket對象 sk = socket.socket()
# 綁定IP和端口 sk.connect(('192.168.13.88',5001))while 1:name = input('請輸入姓名:')sk.send(name.encode('utf-8')) # 鏈接上服務端后,向服務端發送消息if name == 'exit':breakresponse = sk.recv(1024) # 等待服務端給他發送消息print(response.decode('utf-8'))sk.close() # 關閉自己
?黏包:
同時執行多條命令之后,得到的結果很可能只有一部分,在執行其他命令的時候又接收到了之前執行的另外一部分結果,這種顯現就是黏包.
?
#_*_coding:utf-8_*_ from socket import * import subprocessip_port=('127.0.0.1',8888) BUFSIZE=1024tcp_socket_server=socket(AF_INET,SOCK_STREAM) tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) tcp_socket_server.bind(ip_port) tcp_socket_server.listen(5)while True:conn,addr=tcp_socket_server.accept()print('客戶端',addr)while True:cmd=conn.recv(BUFSIZE)if len(cmd) == 0:breakres=subprocess.Popen(cmd.decode('utf-8'),shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)stderr=res.stderr.read()stdout=res.stdout.read()conn.send(stderr)conn.send(stdout)tcp - server 黏包實例:TCP/服務端?
#_*_coding:utf-8_*_ import socket BUFSIZE=1024 ip_port=('127.0.0.1',8888)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) res=s.connect_ex(ip_port)while True:msg=input('>>: ').strip()if len(msg) == 0:continueif msg == 'quit':breaks.send(msg.encode('utf-8'))act_res=s.recv(BUFSIZE)print(act_res.decode('utf-8'),end='')tcp - client 黏包實例:TCP/客戶端tcp協議的拆包機制
成因:當發送端緩沖區的長度大于網卡的MTU時,tcp會將這次發送的數據拆成幾個數據包發出去.MTU是Maximum Transmission Unit的縮寫.意思是網絡上傳的最大數據包.MTU的單位是字節.大部分網絡設備的MTU都是1500.如果本季的MTU比網關的MTU大,大的數據包就會被拆開來傳送,這樣會產生很多數據包碎片,增加丟包率,降低網絡速度.
?struct模塊:
該模塊可以把一個類型,例如數字,轉換成固定長度的bytes
?
struct.pack('i',1111111111111)struct.error: 'i' format requires -2147483648 <= number <= 2147483647 #這個是范圍?
轉載于:https://www.cnblogs.com/zbw582922417/p/9578978.html
總結
以上是生活随笔為你收集整理的python 网络编程--socket模块/struct模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF 异常其他信息: “对类型“Bas
- 下一篇: 9.3学习笔记