python實現TCP客戶端從服務器下載文件

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章