服务端:
import socket def read_file_data(file_name): """获取指定文件的数据""" try: file = open(file_name, "rb") except Exception as e: print("文件不存在") else: # 如果文件太大 会有隐患 file_data=file.read() file.close() return file_data # 创建一个服务端套接字 server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 绑定端口 server_socket.bind(('',9999)) # 将套接字设置成监听模式(被动) server_socket.listen(128) while True: client_socket,client_address=server_socket.accept() print("接收到来自%s的文件下载请求" %str(client_address)) # 接收文件名 读取本地文件地址 file_name=client_socket.recv(4096) file_data=read_file_data(file_name) # 将读取到的文件发送给客户端 if file_data: client_socket.send(file_data) # 关闭客户端关联的套接字 client_socket.close()
客户端:
import os import socket # 1.创建一个本地套接字 tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2.链接服务器 IP=input("服务端IP地址:") port=int(input("服务端口号:")) tcp_socket.connect((IP,port)) # 3.发送文件下载请求的文件名 file_name=input("请选择一个下载的文件名:") tcp_socket.send(file_name.encode()) file=open("new_"+file_name,"wb") # 记录已经写入文件的数据大小 had_write_len=0 while True: # 4.通过该链接 接收文件数据-->写入本地 data=tcp_socket.recv(4096) if data: file.write(data) had_write_len+=len(data) else: # 5.文件传输完成 # 对方关掉链接 file.close() if had_write_len>0: print("文件传输完成") else: # 移除掉空文件 print("服务器没有这个文件") os.remove("new_"+file_name) tcp_socket.close()
import os
import socket
# 1.创建一个本地套接字
tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.链接服务器
IP=input("服务端IP地址:")
port=int(input("服务端口号:"))
tcp_socket.connect((IP,port))
# 3.发送文件下载请求的文件名
file_name=input("请选择一个下载的文件名:")
tcp_socket.send(file_name.encode())
file=open("new_"+file_name,"wb")
# 记录已经写入文件的数据大小
had_write_len=0
while True:
# 4.通过该链接 接收文件数据-->写入本地
data=tcp_socket.recv(4096)
if data:
file.write(data)
had_write_len+=len(data)
else:
# 5.文件传输完成
# 对方关掉链接
file.close()
if had_write_len>0:
print("文件传输完成")
else:
# 移除掉空文件
print("服务器没有这个文件")
os.remove("new_"+file_name)
tcp_socket.close()