日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

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

發(fā)布時間:2025/7/25 python 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 网络编程--socket模块/struct模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

socket模塊:

客戶端:CS架構(gòu),? client -> server

瀏覽器:BS架構(gòu),? browser -> server

?

網(wǎng)絡(luò)通信本質(zhì):傳輸字節(jié)

doc命令查看ip地址:ipconfig / ifconfig(windows系統(tǒng) / mac系統(tǒng))

?

tcp協(xié)議和udp協(xié)議

TCP(Transmission Conteol Protocol)可靠的,面向連接的協(xié)議(eg打電話),傳輸效率低全雙工通信(發(fā)送緩存&接收緩存),面向字節(jié)流.使用TCP的應(yīng)用:Web瀏覽器;電子郵件,文件傳輸程序.

UDP(User Datagram Protocol)不可靠的,無連接的服務(wù),傳輸效率高(發(fā)送前延時小),一對一,一對多,多對一,多對多,面向報文,盡最大努力服務(wù),無擁塞控制.使用UDP的應(yīng)用:域名系統(tǒng)(DNS);視頻流;IP語音(VoIP).

服務(wù)端:

import socket
# 創(chuàng)建服務(wù)端socket對象 server
= socket.socket()

# 綁定IP和端口 server.bind((
'192.168.13.88',5001))

# 后邊可以等5個人 server.listen(
5)while 1:
conn,addr
= server.accept() # 等待客戶端來連接,如果沒人來就傻傻的等待。
#字節(jié)類型while 1:data = conn.recv(1024) # 一次性最多拿1024字節(jié)。if data == b"exit":breakresponse = data + b'在北京'conn.send(response) # 服務(wù)端通過連接對象給客戶端回復(fù)了一個消息。conn.close() # 與客戶端斷開連接

客戶端:

import socket
# 創(chuàng)建服務(wù)端socket對象 sk
= socket.socket()
# 綁定IP和端口 sk.connect((
'192.168.13.88',5001))while 1:name = input('請輸入姓名:')sk.send(name.encode('utf-8')) # 鏈接上服務(wù)端后,向服務(wù)端發(fā)送消息if name == 'exit':breakresponse = sk.recv(1024) # 等待服務(wù)端給他發(fā)送消息print(response.decode('utf-8'))sk.close() # 關(guān)閉自己

?黏包:

同時執(zhí)行多條命令之后,得到的結(jié)果很可能只有一部分,在執(zhí)行其他命令的時候又接收到了之前執(zhí)行的另外一部分結(jié)果,這種顯現(xiàn)就是黏包.

?

#_*_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 黏包實(shí)例:TCP/服務(wù)端

?

#_*_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 黏包實(shí)例:TCP/客戶端

tcp協(xié)議的拆包機(jī)制

成因:當(dāng)發(fā)送端緩沖區(qū)的長度大于網(wǎng)卡的MTU時,tcp會將這次發(fā)送的數(shù)據(jù)拆成幾個數(shù)據(jù)包發(fā)出去.MTU是Maximum Transmission Unit的縮寫.意思是網(wǎng)絡(luò)上傳的最大數(shù)據(jù)包.MTU的單位是字節(jié).大部分網(wǎng)絡(luò)設(shè)備的MTU都是1500.如果本季的MTU比網(wǎng)關(guān)的MTU大,大的數(shù)據(jù)包就會被拆開來傳送,這樣會產(chǎn)生很多數(shù)據(jù)包碎片,增加丟包率,降低網(wǎng)絡(luò)速度.

?struct模塊:

該模塊可以把一個類型,例如數(shù)字,轉(zhuǎn)換成固定長度的bytes

?

struct.pack('i',1111111111111)struct.error: 'i' format requires -2147483648 <= number <= 2147483647 #這個是范圍

?

轉(zhuǎn)載于:https://www.cnblogs.com/zbw582922417/p/9578978.html

總結(jié)

以上是生活随笔為你收集整理的python 网络编程--socket模块/struct模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。