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 异常处理实例详解
Mar 12 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
python使用turtle库与random库绘制雪花
Jun 22 Python
python-opencv颜色提取分割方法
Dec 08 Python
Python Flask框架扩展操作示例
May 03 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
vue常用指令代码实例总结
Mar 16 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
用python对excel进行操作(读,写,修改)
Dec 25 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
JS Loading功能的简单实现
2013/11/29 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
python爬取网站数据保存使用的方法
2013/11/20 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
设置python3为默认python的方法
2018/10/31 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
python使用建议技巧分享(三)
2020/08/18 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
医学实习生自我鉴定
2013/12/12 职场文书
机电一体化求职信
2014/03/10 职场文书
新年主持词
2014/03/27 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
助学贷款贫困证明
2014/09/23 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
英文商务邀请函范文
2015/01/31 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书