tcp文件下载客户端+服务端
客户端:
import socket if __name__ == '__main__':
# 创建tcp客户端socket
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 和服务端socket建立连接
tcp_client_socket.connect(("192.168.131.106", 7878))
# 接收用户输入的文件名
file_name = input("请输入您要下载的文件对应的名字:")
# 对字符串进行编码
file_name_data = file_name.encode("gbk")
# 发送下载文件的请求信息
tcp_client_socket.send(file_name_data)
# 定义二进制空的数据
result_file_data = b""
# 循环接收数据
while True:
# 获取服务端发送的文件二进制数据
file_data = tcp_client_socket.recv(1024)
if file_data:
# 拼接每次读取的数据
result_file_data += file_data
else:
break
# 判断文件是否有数据
if result_file_data:
# 写入到指定文件里面, with open 文件操作完成以后关闭文件是系统自己操作的
with open("/home/python/Desktop/" + file_name, "wb") as file:
file.write(result_file_data)
else:
print("文件为空")
# 关闭socket
tcp_client_socket.close()
服务端:
import socket
import os if __name__ == '__main__':
# 创建tcp服务端socket
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口号
tcp_server_socket.bind(("", 7878))
# 设置监听,把主动套接字改成被动套接字,被动套接字只能接收客户端连接请求,不能收发消息,收发消息使用新的套接字
tcp_server_socket.listen(128)
# 注意点:目前服务端是单任务的一个人下载完成以后另外一个人才能再下载
# 循环接收客户端连接请求
while True:
# 等待接收客户端的连接请求
tcp_service_socket, ip_port = tcp_server_socket.accept()
print(ip_port)
# 接收客户端的请求信息,其实文件名
file_name_data = tcp_service_socket.recv(1024)
# 对二进制数据进行解码获取文件名字符串
file_name = file_name_data.decode("gbk")
# "路径/" + file_name 判断指定路径是否有对应的文件
# file_name在当前工程判断该文件是否存在
if os.path.exists(file_name):
# 打开指定文件把数据发送给客户端
with open(file_name, "rb") as file:
while True:
# 读取文件中的数据
file_data = file.read(1024)
# 判断数据是否为空
if file_data:
# 发送数据给客户端
tcp_service_socket.send(file_data)
else:
break
print(file_name, ip_port)
# 和客户端终止服务
tcp_service_socket.close()
# 关闭服务端套接字,以后不再接收客户端的连接请求
tcp_server_socket.close()
tcp文件下载客户端+服务端的更多相关文章
- QTcpSocket-Qt使用Tcp通讯实现服务端和客户端
		
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QTcpSocket-Qt使用Tcp通讯实现服务端和客户端 本文地址:https:// ...
 - [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]
		
Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– ...
 - win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结
		
win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结 一:前提 注意:现在有两种安装的方式 1. oracle11g服务端(64位)+oracle客户端(32位)+plsql(3 ...
 - 利用TCP   客户端---->服务端   传送文件到指定路径,并返回一个友好的回馈
		
首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...
 - UDP广播 与 TCP客户端 --服务端
		
随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们 ...
 - 基于TCP的socket套接字的网络编程(客户端/服务端模式)
		
于数据完整性要求较高的场合,就应采用TCP协议. IP网络层提供IP寻址和路由.因为在网络上数据可以经由多条线路到达目的地,网络层负责找出最佳的传输线路. IP地址与数据包: IP层就是把数据分组从一 ...
 - TCP中的服务端与客户端的实现
		
TCP中首先要在服务端开启监听,这样才可以从客户端链接 using System; using System.Collections.Generic; using System.Linq; using ...
 - Python后端(一)——客户端/服务端
		
网址组成(四部分) 协议 http, https(https 是加密的http) 主机 g.cn zhihu.com之类的网址 ,因此一般不用填写 路径 下面的「/」和「 ...
 - Winfrom 基于TCP的Socket服务端 多线程(进阶版)
		
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
 
随机推荐
- Dedecms当前位置(面包屑导航)的处理
			
一.修改{dede:field name='position'/}的文字间隔符,官方默认的是> 在include/typelink.class.php第101行左右将>修改为你想要的符号即 ...
 - Machine learning preface
			
Machine learning Preface Definition T: Task E: Experience P: Performance Sequence: T -> E -> P ...
 - .NET面试题1
			
1. const和readonly有什么区别? const关键字用来声明编译时常量,readonly用来声明运行时常量.都可以标识一个常量,主要有以下区别: 1.初始化位置不同.const必须在声明的 ...
 - winfrom C#树勾选等
			
AfterCheck /// <summary> /// 树勾选 /// </summary> /// <param name="sender"> ...
 - Java入门之Tomcat安装及环境变量配置
			
一.Tomcat下载 地址:http://tomcat.apache.org/download-80.cgi#8.0.39 本人用的是Tomcat/8.0.37免安装版,解压到一个目录,本人用的是:D ...
 - 解决jQuery在chrome中获取height为0
			
笔者之前在一家创业公司做过项目,当时遇到这么一个奇怪的问题,我需要用一个jQuery的height()方法获取一个div的高度,但是在chrome浏览器上面有时可以正常获取,但是同一个页面刷新多几次获 ...
 - Redis整理第三波(生存时间、事务管理)
			
expire 设置生存时间 Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即到期后数据销毁. TTL查看key的剩余时间,当返回值为-2时,表示键被删除. 当 ...
 - Smile with face. Smile with mind.
			
Smile with face. Smile with mind.微笑不仅是挂在脸上的,更是发自心底的.
 - MVC 默认路由 Areas
			
1.使用重名controller 在asp.net mvc2以后的版本里面,有了area(区域的概念),这为我们开发中提供了不少方便的地方,但是很不凑巧,若是存在多个重名的controller就会发生 ...
 - 爬虫技术框架——Heritrix
			
Heritrix是一个由Java开发的开源Web爬虫系统,用来获取完整的.精确的站点内容的深度复制, 具有强大的可扩展性,运行开发者任意选择或扩展各个组件,实现特定的抓取逻辑. 一.Heritrix介 ...