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简明入门教程
Aug 04 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python如何生成树形图案
Jan 03 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
python 插入日期数据到Oracle实例
Mar 02 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
Django在Model保存前记录日志实例
May 14 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
python 如何用terminal输入参数
May 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统计字符串中中英文字符的个数
2013/06/23 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
2015/11/23 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
vue中v-model动态生成的实例详解
2017/10/27 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
介绍Python中的一些高级编程技巧
2015/04/02 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
2017/07/13 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
全球领先的各类汽车配件零售商:Advance Auto Parts
2016/08/26 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
个人委托书范本
2014/04/02 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
社区党员干部承诺书
2015/05/04 职场文书
2016十一国庆节感言
2015/12/09 职场文书