tcp客户端从服务端下载文本文件

代码讲解:

server

 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()
View Code

 

client

 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()
View Code

 

注意:该程序仅能发送文本文件,其他类型请自己更改代码

posted @ 2020-02-05 20:49  补码  阅读(326)  评论(0编辑  收藏  举报