客戶端沒有及時接收緩衝區的包,造成多個包接收(服務端傳送了一段資料,客戶端只收了一小部分,客戶端下次再收的時候還是從緩衝區拿上次遺留的資料,產生粘包)
-------------------------------------------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 等待建立連線 阻塞 直到連線建立才往...