
socket通信实现文件的传输,TCP传输方式,python版与C/C++版。
python版
服务器端代码
TCPserver.py:
# -*- coding:utf-8 -*-
客户端代码
TCPclient.py:
# -*- coding:utf-8 -*-
上述程序修改搬运自:Python3使用TCP编写一个简易的文件下载器--Linux公社 ,服务器端添加了一段打印本机IP的代码,客户端添加了一段新建receive文件夹保存接收文件的代码。
程序在Windows和Linux系统上均可运行,测试时需要在服务器程序所在路径新建一个data文件夹并放入用于测试的文件,如图片、视频文件等。
另外,此程序在传输较小的文件(如几KB)时,程序中计算进度的语句会出现除数为0的错误,需要屏蔽传输进度相关语句或作某些修改。另一方面,进度的显示也比较耗时,去掉进度显示可以减小文件传输时间。
测试结果
服务器端(Ubuntu18.04):
D...@deeplearning:~/.../TCPsocketTest$ python3 TCPserver.py
TCP文件传输服务器,本机IP:192.168.1.143
客户端连接成功 ('192.168.1.110', 53114)
请求文件名:1.jpg 文件大小:0.04 MB
请求的文件数据发送完成
客户端(Win10):
============= RESTART: G:...TCPsocketTestTCPclient.py =============
输入服务器IP:192.168.1.143
请输入要下载的文件名:1.jpg
文件名:1.jpg 文件大小:0.04MB
是否下载?(y 确认 q 取消)y
正在下载 >>>>>>
下载结束!
>>>
G:TCPsocketTest>
服务器端运行在Ubuntu18.04系统,客户端运行在Win10系统,当然也可以互换运行。另外,实测win10的服务器端程序与Ubuntu10的客户端通信这种情况,win10的服务器端必须在IDLE环境中运行,在cmd命令行中运行无法连接,原因未知。
C/C++版
将python程序改写为C/C++语言,实现类似的文件传输功能,以下程序用到了winsock以及dll库,只能在Windows系统下运行。
服务器端
server.cpp
// 客户端发送字符串,服务器接收字符串,以相同内容返回 (循环服务)
客户端
client.cpp:
// 客户端发送字符串,服务器接收字符串,以相同内容返回 (循环服务)
运行效果与python版的类似。