@

目录

代码实现

客户端

from socket import *

def main():

    # 创建socket
tcp_client_socket = socket(AF_INET, SOCK_STREAM) # 目的信息
server_ip = input("请输入服务器ip:")
server_port = int(input("请输入服务器port:")) # 链接服务器
tcp_client_socket.connect((server_ip, server_port)) # 输入需要下载的文件名
file_name = input("请输入要下载的文件名:") # 发送文件下载请求
tcp_client_socket.send(file_name.encode("utf-8")) # 接收对方发送过来的数据,最大接收1024*1024=1M个字节
recvData = tcp_client_socket.recv(1024*1024)
# print('接收到的数据为:', recvData.decode('utf-8'))
with open("[接收]"+file_name, "wb") as f:
f.write(recvData) # 关闭套接字
tcp_client_socket.close() if __name__ == "__main__":
main()

服务器端

from socket import *
import sys def get_file_content(file_name):
"""获取文件的内容"""
try:
with open(file_name, "rb") as f:
content = f.read()
return content
except:
print("没有下载的文件:%s" % file_name) def main(): if len(sys.argv) != 2:
print("可以按照如下方式运行:python3 xxx.py 7890")
port = 7890
else:
# 运行方式为python3 xxx.py 7890
port = int(sys.argv[1]) # 创建socket
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
# 本地信息
address = ('', port)
# 绑定本地信息
tcp_server_socket.bind(address)
# 将主动套接字变为被动套接字
tcp_server_socket.listen(128) while True:
# 等待客户端的链接,即为这个客户端发送文件
client_socket, clientAddr = tcp_server_socket.accept()
# 接收对方发送过来的数据
recv_data = client_socket.recv(1024) # 接收1024个字节
file_name = recv_data.decode("utf-8")
print("对方请求下载的文件名为:%s" % file_name)
file_content = get_file_content(file_name)
# 发送文件的数据给客户端
# 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
if file_content:
client_socket.send(file_content)
# 关闭这个套接字
client_socket.close() # 关闭监听套接字
tcp_server_socket.close() if __name__ == "__main__":
main()

注意

  • 使用tcp一定要指明connection,然后接受发送都是使用已经连接的socket
  • 在这里server使用了sysargs,可以作为参考
  • server先绑定本地address,给个循环一直开着服务器,使用accept获取客户端对象和信息

网络编程-python实现-TCP实现文件下载(1.1.4)的更多相关文章

  1. 网络编程-python实现-TCP(1.1.3)

    @ 目录 1.TCP是什么 2.代码实现 1.TCP是什么 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议,由I ...

  2. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  3. iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>

    前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...

  4. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  5. 网络编程Socket之TCP之close/shutdown具体解释(续)

    接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...

  6. 用java网络编程中的TCP方式上传文本文件及出现的小问题

    自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...

  7. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  8. java网络编程socket\server\TCP笔记(转)

    java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅     1 TCP的开销 a ...

  9. C#网络编程入门之TCP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

随机推荐

  1. MathType输入几何符号的技巧

    通过学习几何学的知识,我们发现其中包含的几何符号有很多,比如有表示图形的符号,如三角形,平行四边形,圆,角,圆弧等:还有表示位置关系的符号,如平行,垂直等:还有表示矢量等其他符号,那么MathType ...

  2. FL Studio通道窗口和步进音序器知识讲解

    FL Studio中通道窗口是以样本为概念的音乐制作基础.通道窗口包含了步进音序器并结合了各种丰富的功能,可以通过通道窗口打开各通道的设置窗口.钢琴卷轴等.步进音序器在节奏制作方便表现出很好的优势,它 ...

  3. Happen-Before规则

  4. yii\web\Request::cookieValidationKey must be configured with a secret key.

    yii\web\Request::cookieValidationKey must be configured with a secret key. 出现的错误表示没有设置  cookieValida ...

  5. python -- 对list去重并找出列表list中的重复元素

    一.一个列表中可能含有重复元素,使用set()可以实现列表的去重处理,但是无法知道哪些元素是重复的,下面的函数用于找出哪些元素重复了,以及重复的次数. 代码: from collections imp ...

  6. 一次SQL注入导致的"越权"

    原文来自SecIN社区-作者:tkswifty 相关背景   在实际的业务开发中,SQL交互往往是业务系统中不可或缺的一项.在Java中提供了类似Mybatis.Hibernate.SpringDat ...

  7. LaTeX中的表格

    表格插入代码及注释: 显示效果: 更多命令可以看相关文档,通过在命令行终端输入 texdoc booktab 等命令打开文档.

  8. Impala 3.3.0 源码编译安装

          最新编译Apache-impala 的心酸历程.大概花了10天才整好,极度的崩溃!!!由于国内的上网环境大家都懂的,访问国外的s3.amazonaws.com一些资源库的速度极其感人,尤其 ...

  9. Sql注入--数字型手工测试

    Sql注入--数字型手工测试 漏洞原因:是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. 从而 ...

  10. moviepy简介及安装

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 MoviePy是一个用于视频编辑的Pyt ...