python实现TCP客户端从服务器下载文件
TCP模拟服务器
import socket
def send_file_2_client(new_client_socket, client_addr):
# 1. 接收客户端 需要下载的文件名
# 接收客户端发送过来的 要下载的文件名
file_name = new_client_socket.recv(1024).decode("utf-8")
print("客户端(%s)需要下载文件是:%s" % (str(client_addr), file_name))
file_content = None
# 2. 打开这个文件,读取数据
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件(%s)" % file_name)
# 3. 发送文件的数据给客户端
if file_content:
# new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
new_client_socket.send(file_content)
def main():
# 1.创建套接字 socket
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定本地信息 bind
tcp_server_socket.bind(("", 7890))
# 3.让默认的套接字由主动变为被动 listen
tcp_server_socket.listen(128)
while True:
# 4.等待客户端的链接 accept
new_client_socket, client_addr = tcp_server_socket.accept()
# 5. 调用发送文件函数,完成为客户端服务
send_file_2_client(new_client_socket, client_addr)
# 6. 关闭套接字
new_client_socket.close()
tcp_server_socket.close()
if name == "__main__":
main()
TCP模拟客户端
"""tcp_文件下载客户端"""
from socket import *
def main():
# 创建套接字
tcp_client_socket = socket(AF_INET, SOCK_STREAM)
# 目的信息
server_ip = input("请输入服务器的IP:")
server_port = int(input("请输入服务器的port:"))
server_addr = (server_ip, server_port)
# 连接服务器 connect(目标Ip, 目标端口)
tcp_client_socket.connect(server_addr)
# 输入需要下载的文件名
file_name = input("请输入需要下载的文件名: ")
# 发送数据
tcp_client_socket.send(file_name.encode("utf-8"))
# 接收对方发过来的数据,最大值为1024字节(1K)
recv_data = tcp_client_socket.recv(1024)
if recv_data:
with open("[接收]"+file_name, "wb")as f:
f.write(recv_data)
# 关闭套接字
tcp_client_socket.close()
if name == '__main__':
main()
注意:使用时,一定要先开启服务器,再开启客户端;关闭时也要先关闭客户端,再关闭服务器
作者:Vince Li
来源:CSDN
原文:https://blog.csdn.net/weixin_43250623/article/details/89074221
版权声明:本文为博主原创文章,转载请附上博文链接!