socket模拟服务器,客户端下载东西(ftp)
服务端(ftp_server.py)
import hashlib,socket,os server = socket.socket()
server.bind(("localhost",9999))
server.listen()
while True:
client,address = server.accept()
while True:
req_data = client.recv(1024)
print(req_data.decode())
if not req_data:
print("客户端连接已断开")
break
if len(req_data) == 0: continue
if os.path.isfile(req_data.decode()):
file_size = os.stat(req_data).st_size
print("file size:",file_size)
client.send(str(file_size).encode('utf-8'))
client_ack = client.recv(1024)
f = open(req_data,'rb')
for line in f:
m = hashlib.md5()
print(line)
client.send(line)
m.update(line)
res = m.hexdigest()
client.send(res.encode('utf-8'))
else:
client.send("无此文件")
客户端(ftp_client.py)
import socket,hashlib client = socket.socket()
client.connect(("localhost",9999))
while True:
cmd = input("输入文件名>>:")
if cmd !=None or cmd != '':
client.send(cmd.encode('utf-8'))
file_total_size = client.recv(1024)
print(file_total_size)
file_total_size = int(file_total_size)
client.send(b"ok")
curent_size = 0
size = 0
m = hashlib.md5()
f = open(cmd+"new",'wb')
while curent_size != file_total_size:
if file_total_size-curent_size > 1024:#不是最后一次
size = 1024
else:
size = file_total_size-curent_size
ser_info = client.recv(size)
print(ser_info)
f.write(ser_info)
m.update(ser_info)
curent_size += len(ser_info) else:
print("原文件:%s,新文件:%s"%(str(file_total_size),str(curent_size)))
ser_md5 = client.recv(1024)
cli_md5 = m.hexdigest()
f.close()
print("cli_md5:%s,ser_md5:%s"%(cli_md5,ser_md5.decode()))
说明:
1.程序使用python3运行
2.明确http传输的基本概念
socket模拟服务器,客户端下载东西(ftp)的更多相关文章
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- socket,模拟服务器、客户端通信
服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...
- c++下基于windows socket的服务器客户端程序(基于UDP协议)
前天写了一个基于tcp协议的服务器客户端程序,今天写了一个基于UDP协议的,由于在上一篇使用TCP协议的服务器中注释已经较为详细,且许多api的调用是相同的,故不再另外注释. 使用UDP协议需要注意几 ...
- Socket 模拟HTTP客户端请求
import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import ja ...
- socket本地模拟TCP 服务器+客户端(二)
建立两个py文件,分别打开两个cmd界面,即可进行通信.服务器端运用多进程,连续不断的处理从客户端接收到的数据:客户端通过一个list不断给客户端发送数据. (每个连接都必须创建新线程(或进程)来处理 ...
- 介绍一款chrom浏览器插件 DHC是一款使用chrome模拟REST客户端向服务器发送测试数据的谷歌浏览器插件
先打个小广告哈 公司招java架构师,月薪25K以上,负责电商平台架构工作,工作地点在北京 1号线永安里站 附近,如有意向 请把简历发我邮箱jia6235@163.com 可以内部推荐. DHC是一款 ...
- 【转】Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍
Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,它基于传输层协议TCP建立,用于Interne ...
- C# Socket 模拟http服务器帮助类
0x01 写在前面 0x02 Http协议 0x03 TCP/IP 0x04 看代码 0x05 总结 0x01 写在前面 由于工作中,经常需要在服务器之间,或者进程之间进行通信,分配任务等.用Sock ...
- 运用socket实现简单的服务器客户端交互
Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意 ...
随机推荐
- 火狐浏览器使用firebug获取xpath和css path
工作中,常常会用到网页元素的定位方式,常用的有xpath和css path两种定位方式. 现在简单介绍如何使用工具自动生成元素的定位字符串. 首先介绍在火狐浏览器上使用FireBug及其扩展FireP ...
- java HttpClient POST请求
一个简单的HttpClient POST 请求实例 package com.httpclientget; import java.awt.List; import java.util.ArrayLis ...
- 报错:'Navigator is deprecated and has been removed from this package. It can now be installed
报错:'Navigator is deprecated and has been removed from this package. It can now be installed ' + ...
- 客户端调用cxf发布的服务
import java.util.ArrayList; import java.util.List; import javax.xml.namespace.QName; import org.apac ...
- Xamarin.Forms初始
前言 Xamarin.Forms 为 .NET 开发人员提供一个完整的跨平台 UI 工具包. 在 Visual Studio 中使用 C# 生成完全本机的 Android.iOS 和通用 Window ...
- .NET CORE2.0后台管理系统(一)配置API
一:引用关系图 要写一个项目首先离不开的就是一个清晰的流程图,当然我这里很简单. 上诉完成后打开api下的Startup.cs文件,因为我是配置好了所在我直接上传代码然后介绍一下: using Sys ...
- python 基础之第十一天(面向对象)
#############面向对象##################### 类: In [1]: class MyClass(object): ##用class定义一个类 ...: def psta ...
- Rsyslog 日志相关内容
[root@server vusers_home]# rpm -ql rsyslog|more ###.so结尾为模块,模块有分im为输入模块,om 为输出模块/etc/logrotate ...
- NMS 原理 了解
NMS 原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的I ...
- 移植最新版libmemcached到VC++的艰苦历程和经验总结(下)
结果如何呢?我的VC++测试用例还是不能调用该接口的接口方法,只是这次的报错方式有所改变,提示是每个C/C++程序员最不愿意看到的“内存地址访问违规”,这一次我确实被郁闷了,这是为什么呢? 五.gcc ...