python3 tcp黏包情況一

2022-09-07 02:30:14 字數 2192 閱讀 7190

客戶端沒有及時接收緩衝區的包,造成多個包接收(服務端傳送了一段資料,客戶端只收了一小部分,客戶端下次再收的時候還是從緩衝區拿上次遺留的資料,產生粘包)

-------------------------------------------tcp_stickybag_server.py-------------------------------------------

#coding:utf-8

import

socket

import

subprocess

tcp_server =socket.socket()

ip_port = ("

127.0.0.1

", 8001)

tcp_server.bind(ip_port)

tcp_server.listen(5)

while 1:

conn, addr =tcp_server.accept()

from_client_msg = conn.recv(1024)

print("

來自客戶端的訊息:

", from_client_msg.decode("

utf-8"))

res =subprocess.popen(

from_client_msg.decode(

"utf-8"),

shell=true,

stdout=subprocess.pipe,

stderr=subprocess.pipe,

)conn.send(res.stdout.read())

conn.close()

tcp_server.close()

-------------------------------------------tcp_stickybag_client.py-------------------------------------------

#coding:utf-8

import

socket

tcp_client =socket.socket()

ip_port = ("

127.0.0.1

", 8001)

tcp_client.connect(ip_port)

while 1:

client_input = input("

cmd指令1>>>:

").strip() #

可以輸入dir 或 ipconfig等等

tcp_client.send(client_input.encode("

utf-8"))

from_server_msg = tcp_client.recv(1024)

print("

來自服務端的訊息:

", from_server_msg.decode("

gbk"

))tcp_client.close()

這種情況,可以嘗試調大一次接收資料的最大大小,獲取快取區的大小,方法如下:

#

coding:utf-8

import

socket

tcp_client =socket.socket()

ip_port = ("

127.0.0.1

", 8001)

tcp_client.connect(ip_port)

bufsize =tcp_client.getsockopt(socket.sol_socket, socket.so_rcvbuf)

while 1:

client_input = input("

cmd指令1>>>:

").strip()

tcp_client.send(client_input.encode(

"utf-8"))

from_server_msg =tcp_client.recv(bufsize)

print("

來自服務端的訊息:

", from_server_msg.decode("

gbk"

))tcp_client.close()

關於TCP黏包問題

最近發現自己對於tcp通訊中的黏包問題還有疑問,查閱資料做下總結。一 tcp黏包問題 tcp黏包問題是因為傳送方把若干資料傳送,接收方收到資料時候黏在一包,從接受緩衝區來看,後一包的資料黏在前一包的尾部。二 黏包出現的原因 tcp黏包問題主要出現在兩個方面 1 傳送方問題 首先tcp會預設使用nag...

python3 TCP協議下的socket

tcp server.py coding utf 8 import socket server socket.socket 建立socket物件 ip port 127.0.0.1 8001 ip位址和埠號 server.bind ip port 繫結ip位址和埠號 server.listen 2 ...

tcp和udp和黏包

tcp建立連線的過程 server端 import socket sk socket.socket 建立乙個socket物件 sk.bind 127.0.0.1 8088 繫結ip位址和埠 sk.listen while1 conn,addr sk.accept 等待建立連線 阻塞 直到連線建立才往...