Python socket之TCP通信及下载文件的实现
TCP通信简介
TCP通信是一种面向连接的、可靠的、基于流的传输协议。在TCP连接中,客户端和服务器必须先建立连接,然后通过连接进行数据传输。TCP协议保证了数据的可靠性,它能够检测丢失的数据并自动重传,以确保数据的完整性。
Python实现TCP通信
Python中实现TCP通信可使用socket库。需要注意的是,在客户端和服务器端均要导入socket库。下面将分别介绍客户端和服务器端的实现代码。
客户端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP连接
host = '127.0.0.1' # 服务器地址
port = 12345 # 服务器端口
sock.connect((host, port)) # 连接服务器
# 发送消息
sock.sendall(bytes('Hello, server!', encoding='utf-8'))
# 接收并输出服务器的回复
received_message = sock.recv(1024)
print("Received: {}".format(received_message.decode('utf-8')))
sock.close() # 关闭TCP连接
服务器端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP连接
host = '127.0.0.1' # 服务器地址
port = 12345 # 服务器端口
sock.bind((host, port)) # 绑定地址和端口
sock.listen() # 开始监听
print("Server is running...")
while True:
# 接受一个新连接
connection, address = sock.accept()
# 打印客户端地址
print("Connected by {}".format(address))
# 接收并输出客户端的消息
data = connection.recv(1024)
print("Received: {}".format(data.decode('utf-8')))
# 发送回复
connection.sendall(bytes('Hello, client!', encoding='utf-8'))
connection.close() # 关闭连接
下载文件的实现
可以使用socket库实现文件传输。下面将分别介绍客户端和服务器端的实现代码。
服务器端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP连接
host = '127.0.0.1' # 服务器地址
port = 12345 # 服务器端口
sock.bind((host, port)) # 绑定地址和端口
sock.listen() # 开始监听
print("Server is running...")
while True:
# 接收一个新连接
connection, address = sock.accept()
# 打印客户端地址
print("Connected by {}".format(address))
# 接收文件名
file_name = connection.recv(1024).decode('utf-8')
# 打开文件并发送
with open(file_name, 'rb') as f:
data = f.read(1024)
while data:
connection.sendall(data)
data = f.read(1024)
print("File sent successfully!")
connection.close() # 关闭连接
客户端
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP连接
host = '127.0.0.1' # 服务器地址
port = 12345 # 服务器端口
sock.connect((host, port)) # 连接服务器
# 发送文件名
sock.sendall(bytes('example.txt', encoding='utf-8'))
# 接收文件并保存
with open('example_downloaded.txt', 'wb') as f:
data = sock.recv(1024)
while data:
f.write(data)
data = sock.recv(1024)
print("File downloaded successfully!")
sock.close() # 关闭TCP连接
在这个示例中,客户端向服务器发送一个文件名,服务器接收到后打开文件并将其以二进制方式切割为1024字节的块,然后将每个块通过TCP连接发送到客户端。客户端接收到文件块后直接写入本地文件即可。需要注意的是,在发送文件名和文件的过程中,一定要保证编码方式的一致性,否则会出现解码失败的情况。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python socket之TCP通信及下载文件的实现 - Python技术站