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
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!