客户端:
# tcp_downloadfile_client.py
import socket
import sys
def main():
# 创建套接字
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 获取服务器的ip port
dest_ip = input('请输入要链接的服务器:')
dest_port = int(input('请输入要链接的服务器的端口:'))
dest_addr = (dest_ip,dest_port)
# 链接到服务器
tcp_client_socket.connect(dest_addr)
print('——链接成功——')
# 获取下载的文件名字
filename_download = input('请输入要下载的文件名字:')
# 将文件名字发送到服务器
tcp_client_socket.send(filename_download.encode('utf-8'))
# 接收文件中的数据
recv_data = tcp_client_socket.recv(1024)
# 保存接受到的数据到一个文件中
if recv_data:
with open('download'+filename_download,'wb') as f:
f.write(recv_data)
print('下载完成')
else:
print('返回为空,请重新输入文件名')
# 关闭套接字
tcp_client_socket.close()
if __name__=='__main__':
main()
服务器端:
# tcp_downloadfile_server.py
import socket
def send_file_to_client(new_client_socket,client_addr):
# 接受客户端发送过来的要下载的文件名
recv_file_data = new_client_socket.recv(1024).decode('utf-8')
if recv_file_data:
print('客户端{}要下载的文件是:{}'.format(client_addr,recv_file_data))
print('下载中,请稍等')
file_content = None
# 打开这个文件,读取数据
try:
f = open(recv_file_data,'rb')
file_content = f.read()
except Exception as ret:
print('服务器未存储客户要下载的文件{}'.format(recv_file_data))
# 发送数据给客户端消息
if file_content:
new_client_socket.send(file_content)
else:
return file_content
else:
print("***欢迎再次访问***")
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定本地ip和port
localaddr = ('',8080)
tcp_server_socket.bind(localaddr)
# 监听
tcp_server_socket.listen(128)
while True:
print('————等待用户提交下载请求————')
# 等带客户端并分配套接字
new_client_socket,client_addr = tcp_server_socket.accept()
print('——用户链接成功——')
print('——正在等待用户输入查找文件——')
# 调用发送文件函数,完成为客户端服务
send_file_to_client(new_client_socket,client_addr)
# 关闭套接字
print('——完成服务——')
print()
new_client_socket.close()
tcp_server_socket.close()
if __name__=='__main__':
main()