檔案下載器專案
阿新 • • 發佈:2018-12-21
這個專案的本質是在tcp伺服器上的一次演進,將客戶端與伺服器之間的資料流記錄到檔案當中。程式碼中初步加入了異常捕獲,因為沒有使用多程序等技術,看起來還是挺簡陋的。 客戶端的程式碼書寫
import socket def main(): client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) dest_ip = input("請輸入下載伺服器的ip:") dest_port = int(input("請輸入伺服器的埠:")) client_sock.connect((dest_ip,dest_port)) down_file = input("請輸入要下載的檔名") client_sock.send(down_file.encode("utf-8")) recv_data = client_sock.recv(1024) #對於with 寫法有效的保證了開啟檔案後的異常,但對於開啟檔案時出現異常無能為力 if recv_data: with open("[新]"+down_file,"wb") as f: f.write(recv_data) client_sock.close() if __name__ == "__main__": main()
伺服器端的程式碼書寫
import socket def send_file_2_client(new_client_socket,client_addr): file_name = new_client_socket.recv(1024).decode("gbk") print("客戶端(%s)需要下載的檔案是:%s" % (str(client_addr), file_name)) file_content = None #這個地方避免打卡檔案異常,因為經常會有檔案異常 try: f = open(file_name,"rb") file_content = f.read() f.close() except Exception as ret: print("沒有要下載的檔案(%s)" % file_name) #在客戶端和這裡都加入了檔案是否存在的判斷 if file_content: new_client_socket.send(file_content) def main(): tcp_serve_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) tcp_serve_socket.bind(("",7788)) tcp_serve_socket.listen(128) while True: new_client_socket,client_addr = tcp_serve_socket.accept() # file_name = new_client_socket.recv(1024).decode("gbk") # print("客戶端(%s)需要下載的檔案是:%s" % (str(client_addr),file_name)) # new_client_socket.send(b"tangsai----ok-----") send_file_2_client(new_client_socket, client_addr) new_client_socket.close() tcp_serve_socket.close() if __name__ == "__main__": main()
這個專案到後面還很大的修改空間