tcp客户端从服务端下载文本文件
代码讲解:
server
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import socket 2 3 4 def send_file_client(new_client_socket, new_client_addr): 5 # 接收客户端需要下载的文件名 6 file_name = new_client_socket.recv(1024).decode('gbk') 7 print('客户端' + str(new_client_addr) + '需要下载的文件是: ' + file_name) 8 # 打开文件读取数据 9 file_data = None 10 try: 11 file = open(file_name, 'rb') 12 file_data = file.read() 13 file.close() 14 except: 15 print('没有要下载的文件' + file_name) 16 if file_data: 17 new_client_socket.send(file_data) 18 19 20 def main(): 21 # 创建套接字 22 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 23 # 绑定服务器ip和port 24 local_addr = ('', 8000) 25 tcp_socket.bind(local_addr) 26 # 监听 27 tcp_socket.listen(128) 28 print('等待客户端接入...') 29 # 等待客户端接入 30 new_client_socket, new_client_addr = tcp_socket.accept() 31 print(str(new_client_addr) + ': ' + '接入...') 32 # 调用函数发送数据给客户端 33 send_file_client(new_client_socket, new_client_addr) 34 # 关闭套接字 35 new_client_socket.close() 36 tcp_socket.close() 37 38 39 if __name__ == '__main__': 40 main()
client
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 import socket 2 3 4 def main(): 5 # 创建套接字 6 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 服务器ip和port 8 server_ip = input('服务器ip: ') # 192.168.6.206 9 server_port = int(input('服务器port: ')) 10 # 链接服务器 11 tcp_socket.connect((server_ip, server_port)) 12 # 需要下载的文件 13 download_file_name = input('需要下载的文件名: ') 14 # 发送文件名 15 tcp_socket.send(download_file_name.encode('gbk')) 16 # 接收文件 17 recv_data = tcp_socket.recv(1024*1024) 18 if recv_data: 19 with open(download_file_name, 'wb') as file: 20 file.write(recv_data) 21 else: 22 print('没有该文件') 23 # 关闭套接字 24 tcp_socket.close() 25 26 27 if __name__ == '__main__': 28 main()
注意:该程序仅能发送文本文件,其他类型请自己更改代码