TCP案例——客户端循环向服务器下载文件
效果:
客户端 服务器
客户端代码:
import socket def main(): while True: # 1.创建套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.连接服务器 # dest_ip = input("请输入服务器的IP:") # dest_port = int(input("请输入服务器的端口:")) client_socket.connect((‘192.168.2.100‘, 7788)) # 3.向服务器发送要下载的文件 file_name = input("请输入您要下载的文件名:") client_socket.send(file_name.encode(‘utf-8‘)) # 4.接收文件——recv内单位是字节 recv_data = client_socket.recv(1024) # print(recv_data) # 5.写入文件 # 如果文件有内容才写入文件 if recv_data: with open(‘[接收]‘ + file_name, ‘wb‘) as f: f.write(recv_data) print("文件下载完成") else: print("要下载的文件不存在或为空。") # 6.关闭套接字 client_socket.close() if __name__ == ‘__main__‘: main()
服务器代码:
import socket def main(): while True: # 1.创建监听套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2.绑定IP和Port tcp_server_socket.bind((‘‘, 7788)) # 3.设置为被动监听 tcp_server_socket.listen(128) try: while True: # 4.等待客户端连接 print(‘等待客户端连接中......‘) client_socket, client_adress = tcp_server_socket.accept() print(‘已连接客户端 %s‘ % str(client_adress)) # 5.获取客户端需要的文件并回传给客户端 file_name = client_socket.recv(1024) print("%s 客户端需要下载的文件为:%s" % (str(client_adress), file_name.decode(‘utf-8‘))) # 如果有,将文件回传给客户端。没有则打印文件不存在 file_content = None try: f = open(file_name, ‘rb‘) file_content = f.read() print("已发送文件给客户端") except Exception as ent: print("文件不存在!") if file_content: client_socket.send(file_content) # 6.关闭套接字 client_socket.close() except: print("客户端异常断开") tcp_server_socket.close() if __name__ == ‘__main__‘: main()