首页 > 编程 > Python > 正文

python使用tcp实现局域网内文件传输

2020-01-04 14:48:42
字体:
来源:转载
供稿:网友

本文为大家分享了python使用tcp实现局域网内文件传输的具体代码,供大家参考,具体内容如下

功能:

可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件。

实现需求:

安装socket模块 
简单了解sokcet模块用法

服务器代码如下:

import socketdef file_deal(file_name): # 定义函数用于处理用户索要下载的文件 try:  # 二进制方式读取  files = open(file_name, "rb")  mes = files.read() except:  print("没有该文件") else:  files.close()  return mesdef main(): # 创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口号 tcp_socket.bind(("",8888)) # 将主动套接字转为被动套接字 tcp_socket.listen(128) while True:  # 利用accept获取分套接字以及客户端的地址  client_socket,client_addr = tcp_socket.accept()  # 接收客户端的数据  file_name = client_socket.recv(4096)  # 调用函数处理用户下载的文件  mes = file_deal(file_name)  if mes:   # 如果文件不为空发送   client_socket.send(mes)  #关闭分套接字  client_socket.close()if __name__ == "__main__": main()import socketdef file_deal(file_name): # 定义函数用于处理用户索要下载的文件 try:  # 二进制方式读取  files = open(file_name, "rb")  mes = files.read() except:  print("没有该文件") else:  files.close()  return mesdef main(): # 创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口号 tcp_socket.bind(("",8888)) # 将主动套接字转为被动套接字 tcp_socket.listen(128) while True:  # 利用accept获取分套接字以及客户端的地址  client_socket,client_addr = tcp_socket.accept()  # 接收客户端的数据  file_name = client_socket.recv(4096)  # 调用函数处理用户下载的文件  mes = file_deal(file_name)  if mes:   # 如果文件不为空发送   client_socket.send(mes)  #关闭分套接字  client_socket.close()if __name__ == "__main__": main()

客户端代码:

from socket import *import osdef main(): # 建立套接字 tcp_socket = socket(AF_INET, SOCK_STREAM) # 接收用输入的服务器端的ip和端口 tcp_ip = input("请输入ip:") tcp_port = int(input("请输入端口:")) # 连接服务器 tcp_socket.connect((tcp_ip, tcp_port)) # 输入要下载的文件名 file_name = input("请输入要下载的文件名:") # 将文件名发送至服务器端 tcp_socket.send(file_name.encode()) # 创建一个空文件 new_file = open(file_name, "wb") # 用与计算读取的字节数 time = 0 while True:  # 接收服务器端返回的内容  mes = tcp_socket.recv(4096)  # 如果内容不为空执行  if mes:   # 解码并向文件内写入   new_file.write(mes.decode())   # 计算字节   time += len(mes)  else:   # 如果字节数为空即未收到内容   if time == 0:    # 关闭文件    new_file.close()    # 删除刚刚创建的文件    os.remove(file_name)    print("没有您要下载的文件")   else:    # 如过time有值时name文件传输完成    print("文件下载成功")   break # 关闭套接字 tcp_socket.close()if __name__ == '__main__':main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表