在python中开启thread通过socket传输文件实战应用

本文介绍如何使用Python的socket模块在服务器端与客户端间传输文件。文章详细解释了服务器端和客户端的实现步骤,包括建立连接、发送反馈消息、通过线程发送文件数据等。

我们在使用python进行消息传输时,会使用到socket来建立连接。下面我们以文件传输为例来简单讲解一下。

首先,要实现数据传输,就必须建立起服务器端和客户端。

服务器端使用的包:

import socket
import threading
import os

服务器端我们使用以下方法来做ip和port的绑定,并且设置监听数。

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(("127.0.0.1", 23412))
sk.listen(10)

为了客户端连接后可以得知是否连接成功,我们设定在服务器收到客户端连接请求后,向客户端发回一条message用于反馈。

conn, address = sk.accept()
conn.sendall(bytes("连接成功!", encoding="utf-8"))

接下来是服务器端的接收线程,由于考虑到收发文件大小不确定,我们采用切片的方式进行文件收发。发送线程如下:

def send_message():
	path = 'test.txt'
	f = open(path)
	filesize = os.path.getsize(path)
	string = f.read()
	flag = 0
	while (flag + 1024) < filesize:
		conn.sendall(bytes(string[flag:flag + 1024], encoding='utf-8'))
		flag = flag + 1024
	conn.sendall(bytes(string[flag:flag + 1024], encoding='utf-8'))

最后我们在主线程中开启发送子线程,并在线程结束后,断开连接。

try:
	t = threading.Thread(send_message())
	t.start()
except:
	print("Error: unable to start thread")
sk.close()

客户端原理相似,理解了服务器端,客户端自然就理解了,楼主知道大家心急,就直接上代码了。

import socket
import threading

obj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
obj.connect(("127.0.0.1", 23412))
ret = str(obj.recv(1024), encoding="utf-8")
print(ret)

def recv_message():
	print('recv_message start ...')
	res = str(obj.recv(1024), encoding="utf-8")
	if res != '':
		print(res)

try:
	t = threading.Thread(recv_message())
	t.start()
except:
	print("Error: unable to start thread")

如果大家有什么想了解的方向或遇到什么问题,欢迎在下方评论区评论。

楼主学识浅薄,知道的问题会回复大家解决方法,不知道的也欢迎一起探讨。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值