工作中会用经常要到服务器下载文件或者其他数据,于是利用tcp协议写了一个文件下载案例:
1 服务器代码:
import socket import os if __name__ == "__main__": serves_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket绑定ip serves_socket.bind(("", 9080)) #socket监听 serves_socket.listen(128) #socket链接 while True: client_socket, client_address = serves_socket.accept() #接shou数据 recv_data = client_socket.recv(1024) recv_msg = recv_data.decode("utf-8") print(recv_msg) #查找是否存在文件 if os.path.exists(recv_msg): #如果桌面存在这个文件 with open(recv_msg, "rb") as f: while True: file_content = f.read(1024) if file_content: client_socket.send(file_content) else: break #不存在则关闭这个客户端 client_socket.close() serves_socket.close()#人生苦短,我用python
2 客户端代码:
import socket if __name__ == "__main__": client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #连接的服务器 client_socket.connect((input("请输入ip地址"), int(input("请输入端口号")))) #发送要查找的文件名字 file_name = input("请输入要查找的文件名称") fil_data = file_name.encode("utf-8") client_socket.send(fil_data) str_list = [] #接收返回来的数据 while True: recv_file_data = client_socket.recv(1024) if recv_file_data: str_list.append(recv_file_data) else: break #写入文件 if str_list: with open("../../" + file_name, "wb") as f: for file_content_b in str_list: f.write(file_content_b) else: print("您要下载的文件不存在的") client_socket.close() 客户端执行结果:
请输入ip地址192.168.243.130 请输入端口号9080 请输入要查找的文件名称1.txt