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


Posted in Python onMarch 20, 2020

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

功能:

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

实现需求:

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

服务器代码如下:

import socket

def file_deal(file_name):
 # 定义函数用于处理用户索要下载的文件
 try:
 # 二进制方式读取
 files = open(file_name, "rb")

 mes = files.read()

 except:


 print("没有该文件")

 else:

 files.close()

 return mes

def 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 socket


def file_deal(file_name):
 # 定义函数用于处理用户索要下载的文件
 try:
 # 二进制方式读取
 files = open(file_name, "rb")

 mes = files.read()

 except:


 print("没有该文件")

 else:

 files.close()

 return mes

def 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 os

def 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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解析Python中的变量、引用、拷贝和作用域的问题
Apr 07 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python基础教程项目三之万能的XML
Apr 02 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
Python装饰器的执行过程实例分析
Jun 04 Python
matplotlib给子图添加图例的方法
Aug 03 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python实现代码统计工具
Sep 19 Python
python rsa-oaep加密的示例代码
Sep 23 Python
python简单实现插入排序实例代码
Dec 16 Python
Python字典和列表性能之间的比较
Jun 07 Python
基于python3实现socket文件传输和校验
Jul 28 #Python
python多进程实现文件下载传输功能
Jul 28 #Python
python如何生成网页验证码
Jul 28 #Python
python3利用tcp实现文件夹远程传输
Jul 28 #Python
python使用tornado实现简单爬虫
Jul 28 #Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 #Python
对tensorflow 的模型保存和调用实例讲解
Jul 28 #Python
You might like
聊天室php&mysql(四)
2006/10/09 PHP
PHP脚本中include文件出错解决方法
2008/11/20 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
详解js闭包
2014/09/02 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
js实现图片360度旋转
2017/01/22 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
详解在Python程序中自定义异常的方法
2015/10/16 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
Python排序函数的使用方法详解
2020/12/11 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
特色蛋糕店创业计划书
2014/01/28 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
应届生求职信
2014/05/31 职场文书
员工担保书范本
2015/09/22 职场文书
python爬虫之selenium库的安装及使用教程
2021/05/23 Python