文件下载器客户端
这个版本的只是为了方便回顾一下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()
如果你和我有共同爱好,我们可以加个好友一起交流!