文件下载器客户端
这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是 服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下.
1 from socket import *
4 def mian(): 5 # 1. 创建套接字 6 tcp_client_scoket = socket(AF_INET,SOCK_STREAM) 7 8 # 2.连接本地服务器 9 tcp_client_scoket.connect(('192.168.0.117',8889)) 10 11 # 3.输入要下载的文件名 12 file_name = input('请输入要下载的文件名:') 13 tcp_client_scoket.send(file_name.encode()) 14 15 # 4.接收传过来的文件内容 16 data = tcp_client_scoket.recv(1024*1024*1024) 17 print(data) 18 19 # 5.写入本地 20 if data: 21 with open('/home/python/Desktop/' + file_name,'wb') as f: 22 f.write(data) 23 24 tcp_client_scoket.close() 25 29 if __name__ == '__main__': 30 mian()
文件下载器服务端
1 from socket import * 2 3 4 def get_file_name(file_name): 5 """获取文件内容""" 6 try: 7 with open('/home/python/Desktop/test/'+file_name,'rb') as f: 8 content = f.read() 9 return content 10 except: 11 print('无此文件') # 会返回一个空值 12 13 def main(): 14 # 1.创建服务器的tcp套接字 15 tcp_serve_socket = socket(AF_INET,SOCK_STREAM) 16 17 # 2.端口复用 18 tcp_serve_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,True) 19 20 # 3.绑定服务器端口 21 tcp_serve_socket.bind(('',8889)) 22 23 # 4.开始监听 24 tcp_serve_socket.listen(5) 25 26 while True: 27 new_socket,client_addr = tcp_serve_socket.accept() 28 print("来自%s的下载请求" % str(client_addr)) 29 30 # 5.接收来自服务端的文件名 31 file_data = new_socket.recv(1024) 32 file_name = file_data.decode() 33 34 # 6.查找是否有此文件并写出 35 content = get_file_name(file_name) 36 37 # 7. 发送文件内容 38 if content: 39 new_socket.send(content) 40 print('发送成功') 41 42 #8.关闭new_socket套接字 43 new_socket.close() 44 45 tcp_serve_socket.close() 46 47 if __name__ == '__main__': 48 main()
如果你和我有共同爱好,我们可以加个好友一起交流!