服务端代码:
import socket
def send_file_2_client(conn, addr):
# 1.读取客户端请求
file_name = conn.recv(1024).decode('utf-8')
print('客户端[%s]要下载的文件名:%s' % (str(addr[0]), file_name))
file_content = None
# 2.打开文件读取数据
try:
f = open(file_name, 'rb')
file_content = f.read()
f.close()
except:
print('文件不存在')
# 3.发送文件给客户端
if file_content:
conn.send(file_content)
def main():
# 1.创建套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定监听
server.bind(('127.0.0.1', 9999))
server.listen(128)
print('------服务器连接成功------')
# 3.接收数据,生成新的套接字
while True:
conn, addr = server.accept()
print(addr)
# 4.调用发送文件函数
send_file_2_client(conn, addr)
# 5.关闭套接字
conn.close()
server.close()
if __name__ == '__main__':
main()
客户端代码
import socket
def main():
# 1.创建套接字
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.获取服务器ip port 并连接
client.connect(('127.0.0.1',9999))
print('-------连接成功-------')
# 3.获取下载文件的名字并发送给服务器
file_name = input('请输入要下载的文件名:')
client.send(file_name.encode('utf-8'))
# 4.接收文件中的数据
recv_data = client.recv(1024)
# 5.保存接收到的数据并保存到文件中
if recv_data:
with open('new'+file_name,'wb') as f:
f.write(recv_data)
# 6.关闭套接字
client.close()
if __name__ == "__main__":
main()
同级目录下先准备好一个文件当作服务端文件,下载本地后拼接新的名字,如果要下载的文件不存在会提示报错!