python高階(一)——網路程式設計Socket(2)檔案下載案例
阿新 • • 發佈:2018-12-17
1、伺服器
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("Wrong %s" % file_name) # 3 傳送檔案的資料給客戶端 if file_content: new_client_socket.send(file_content) def server(): # 建立socket tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 繫結本地資訊 tcp_socket.bind("", 7890) # 預設套接字由主動變為被動 tcp_socket.listen(128) while True: # 等待客戶端連線 new_client_socket, client_addr = tcp_socket.accept() send_file_2_client(new_client_socket, client_addr) new_client_socket.close() tcp_socket.close() if __name__ == '__main__': server()
2、客戶端
import socket def client(): # 1 建立套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2 獲取束縛器的ip port dest_ip = input("伺服器ip:") dest_port = int(input("伺服器port:")) # 3 連結伺服器 tcp_socket.connect(dest_ip, dest_port) # 4 獲取下載的檔名字 download_file_name = input("下載檔名") # 5 將檔名傳送到伺服器 tcp_socket.send(download_file_name.encode("utf-8")) # 6 接收檔案中的資料 recv_data = tcp_socket.recv(1024) if recv_data: # 7 儲存接收的資料到檔案中 with open("[new]" + download_file_name, "wb") as f: f.write(recv_data) # 8 關閉套接字 tcp_socket.close() if __name__ == '__main__': client()