下载其实需要两个模型,一是服务器方,作为应答及发送数据,另一个模型则是客户端方,发起下载请求且下载服务器发送的数据,有了这个概念基本上就可以写了。
1、客户端方代码
import socket def main(): # 创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # socket创建套接字,DGRAM为UDP,STREAM为TCP # 输入需要绑定的服务器信息 dest_ip = input("请输入服务器ip:") dest_port =int(input("请输入服务器porti:")) # 绑定服务器 tcp_socket.connect((dest_ip,dest_port)) # TCP需要绑定服务器IP端口,这点需要与UDP区分 # 输入需要下载的文件名字 file_name = input("请输入你要下载的文件名:") tcp_socket.send(file_name.encode(‘utf-8‘)) # 收到信息并且下载 data = tcp_socket.recv(1024*1024) with open (‘新‘+file_name,‘wb‘) as f: f.write(data) # 关闭套接字 tcp_socket.close() if __name__ == ‘__main__‘: main()
2、服务器代码
import socket def main(): # 创建套接字 tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 绑定本地信息 local_addr = (‘‘,8080) tcp_socket.bind(local_addr) # 监听 tcp_socket.listen(128) # TCP服务器具有监听,等待连接的环节 # 提供下载服务 new_client,client_addr = tcp_socket.accept() # 等待连接环节,如果有客户端连接则返回一个元祖,元祖[0]是接下来收发信息使用的新套接字,元祖[1]则是连接的客户端地址 file_name = new_client.recv(1024).decode(‘utf-8‘) print(‘链接成功,来自%s‘ %(str(client_addr))) try: f = open(file_name,‘rb‘) data = f.read() except Exception as t: print("文件名错误%s" %(t)) new_client.send(data) new_client.close() tcp_socket.close() if __name__ == "__main__": main()
以上代码,在linux上直接运行两个终端即可进行
原文:https://www.cnblogs.com/oslo254804746/p/11870531.html