Linux socket 本身并不提供數(shù)據(jù)壓縮功能。但是,你可以在應用層使用數(shù)據(jù)壓縮算法(如 gzip、zlib 等)對數(shù)據(jù)進行壓縮,然后再通過 socket 發(fā)送。接收端收到數(shù)據(jù)后,再對其進行解壓縮。
以下是一個簡單的示例,展示了如何在 Python 的 socket 應用中使用 zlib 進行數(shù)據(jù)壓縮和解壓縮:
import socket
import zlib
# 創(chuàng)建一個 TCP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen(5)
print("Server is listening...")
conn, addr = server_socket.accept()
print(f"Connected by {addr}")
try:
while True:
# 接收客戶端發(fā)送的數(shù)據(jù)
data = conn.recv(1024)
if not data:
break
# 使用 zlib 對數(shù)據(jù)進行解壓縮
decompressed_data = zlib.decompress(data)
print(f"Received: {decompressed_data.decode('utf-8')}")
# 對數(shù)據(jù)進行壓縮
compressed_data = zlib.compress("Hello, client!".encode('utf-8'))
# 將壓縮后的數(shù)據(jù)發(fā)送給客戶端
conn.sendall(compressed_data)
finally:
conn.close()
server_socket.close()
在這個示例中,服務器接收客戶端發(fā)送的數(shù)據(jù),使用 zlib 對數(shù)據(jù)進行解壓縮,然后回復壓縮后的數(shù)據(jù)??蛻舳耸盏綌?shù)據(jù)后,對其進行解壓縮。這樣,你就可以在 socket 應用中使用數(shù)據(jù)壓縮功能了。