服務(wù)端代碼:
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.打開文件讀取數(shù)據(jù)
try:
f = open(file_name, 'rb')
file_content = f.read()
f.close()
except:
print('文件不存在')
# 3.發(fā)送文件給客戶端
if file_content:
conn.send(file_content)
def main():
# 1.創(chuàng)建套接字
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.綁定監(jiān)聽
server.bind(('127.0.0.1', 9999))
server.listen(128)
print('------服務(wù)器連接成功------')
# 3.接收數(shù)據(jù)淤击,生成新的套接字
while True:
conn, addr = server.accept()
print(addr)
# 4.調(diào)用發(fā)送文件函數(shù)
send_file_2_client(conn, addr)
# 5.關(guān)閉套接字
conn.close()
server.close()
if __name__ == '__main__':
main()
客戶端代碼
import socket
def main():
# 1.創(chuàng)建套接字
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.獲取服務(wù)器ip port 并連接
client.connect(('127.0.0.1',9999))
print('-------連接成功-------')
# 3.獲取下載文件的名字并發(fā)送給服務(wù)器
file_name = input('請輸入要下載的文件名:')
client.send(file_name.encode('utf-8'))
# 4.接收文件中的數(shù)據(jù)
recv_data = client.recv(1024)
# 5.保存接收到的數(shù)據(jù)并保存到文件中
if recv_data:
with open('new'+file_name,'wb') as f:
f.write(recv_data)
# 6.關(guān)閉套接字
client.close()
if __name__ == "__main__":
main()
同級(jí)目錄下先準(zhǔn)備好一個(gè)文件當(dāng)作服務(wù)端文件刮刑,下載本地后拼接新的名字,如果要下載的文件不存在會(huì)提示報(bào)錯(cuò)!