日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python 网络编程--socket模块/struct模块

發布時間:2025/7/25 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。