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 ...
随机推荐
- 在PHP中使用全局变量的几种方法
简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数据库连接类.用户资料等等.有很多方法能够使这些数据 ...
- PHP 7 的几个新特性
1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <?php $a = isset($_GET[ ...
- attr()与setAttribute()的区别
先看红色标注的: 这里传过来的this是个元素节点,因此currentTr也得用获取节点的方式parentNode去获取,而不能写parent(),这是第一个需要注意的地方. 第二个问题,就是怎么给c ...
- 深入.NET框架。
1.Microsoft.NET框架结构是一个面向网络,支持各种用户终端的开发平台. 2..NET框架的主要内容有CLR,FCL,ADO.NET,XML,ASP.NET,WinForms和WebSeri ...
- [Java][Liferay] 如何从Javascript的function中获取language property的值
问题描述 在Portlet中,Javascript中通过Liferay.Language.get("key")的方式是拿不到自己添加的property的值,原因是Liferay.L ...
- [Java][Liferay] File system in liferay
EditFileEntryAction.java protected FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequ ...
- HDU5972Regular Number(ShiftAnd算法 bitset)
题意 题目链接 第一行的\(n\)表示模式串长度为\(n\) 接下来\(n\)行,每行开头有一个整数\(num\)表示匹配串中该位置的字符可以在\(num\)个桅子花出现,接下来输入这\(num\)个 ...
- 洛谷P3372 【模板】线段树 1(树状数组)
题意 题目链接 Sol Get到了这题树状数组的做法,感觉非常nice 区间加:直接差分 区间求和:考虑每一位的贡献 \(sum_{i = 1}^x (x+1 - i) d_i\) \(= sum_{ ...
- BZOJ3261: 最大异或和(可持久化trie树)
题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...
- jQuery核心探究
动画animate.animate({}, { duration: 5000, progress: function (now, progressNum) {}, complete: function ...