网络编程实例2——上传文件
服务器端
import socket
# 1.监听本机的ip和端口
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('127.0.0.1',8001)) # 绑定ip和端口
sock.listen(5) # 支持排队等待5人
conn,addr=sock.accept() #阻塞
# 接收文件大小
data=conn.recv(1024)
total_file_size=int(data.decode('utf-8'))
#接收文件内容
file_object=open('xxx.png','wb')
recv_size=0
while True:
data=conn.recv(1024) #每次最多接收1024字节
file_object.write(data)
file_object.flush() #清空内存缓冲区
recv_size+=len(data)
#上传完成
if recv_size==total_file_size:
break
sock.close()
客户端
import socket,os,time
# 1.生成一个客户端连接对象,向指定ip发送连接请求
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8001))
file_path=input('请输入要上传的文件:')
# 先发送文件大小
file_size=os.path.getsize(file_path)
client.sendall(str(file_size).encode('utf-8'))
print('准备...')
time.sleep(2)
print('开始上传...')
file_object=open(file_path,'rb')
read_size=0
while True:
chunk=file_object.read(1024) #每次读取1024个字节
client.sendall(chunk)
read_size+=len(chunk)
if read_size==file_size:
break
client.close()