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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Python字符串处理之count()方法的使用
May 18 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
详解python之配置日志的几种方式
May 22 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
python定时截屏实现
Nov 02 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python中os模块的简单使用及重命名操作
Apr 17 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 验证码制作(网树注释思想)
2009/07/20 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
php比较两个绝对时间的大小
2014/01/31 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
YII框架中搜索分页jQuery写法详解
2016/12/19 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
WHOOPS PHP调试库的使用
2017/09/29 PHP
php压缩文件夹最新版
2018/07/18 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
2018/08/19 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
vue2.0使用v-for循环制作多级嵌套菜单栏
2018/06/25 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
Python的净值数据接口调用示例分享
2016/03/15 Python
Windows平台Python连接sqlite3数据库的方法分析
2017/07/12 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
python实现扫雷小游戏
2020/04/24 Python
Python多线程正确用法实例解析
2020/05/30 Python
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
办理护照工作证明
2014/10/10 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP