服务端(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)的更多相关文章

  1. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  2. socket,模拟服务器、客户端通信

    服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...

  3. c++下基于windows socket的服务器客户端程序(基于UDP协议)

    前天写了一个基于tcp协议的服务器客户端程序,今天写了一个基于UDP协议的,由于在上一篇使用TCP协议的服务器中注释已经较为详细,且许多api的调用是相同的,故不再另外注释. 使用UDP协议需要注意几 ...

  4. Socket 模拟HTTP客户端请求

    import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import ja ...

  5. socket本地模拟TCP 服务器+客户端(二)

    建立两个py文件,分别打开两个cmd界面,即可进行通信.服务器端运用多进程,连续不断的处理从客户端接收到的数据:客户端通过一个list不断给客户端发送数据. (每个连接都必须创建新线程(或进程)来处理 ...

  6. 介绍一款chrom浏览器插件 DHC是一款使用chrome模拟REST客户端向服务器发送测试数据的谷歌浏览器插件

    先打个小广告哈 公司招java架构师,月薪25K以上,负责电商平台架构工作,工作地点在北京 1号线永安里站 附近,如有意向 请把简历发我邮箱jia6235@163.com 可以内部推荐. DHC是一款 ...

  7. 【转】Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍

    Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,它基于传输层协议TCP建立,用于Interne ...

  8. C# Socket 模拟http服务器帮助类

    0x01 写在前面 0x02 Http协议 0x03 TCP/IP 0x04 看代码 0x05 总结 0x01 写在前面 由于工作中,经常需要在服务器之间,或者进程之间进行通信,分配任务等.用Sock ...

  9. 运用socket实现简单的服务器客户端交互

    Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意 ...

随机推荐

  1. 在windows下把Mongodb设置系统服务

    把Mongodb Server 设置为系统,方便启动与停止 今天一时兴起在本地安装了下Mongodb服务,安装完后,创建了配置文件为数据库服务指明在哪里存储数据库原始文件,随即就启动了mongo se ...

  2. atol实现【转】

    int my_atoi(const char *str) { assert(str != NULL); ; ; while(*str == ' ' || *str == '\n' || *str == ...

  3. Java中锁的内存语义

    我们都知道,Java中的锁可以让临界区互斥执行.锁是Java并发编程中最重要的同步机制,锁除了可以让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息.下面是锁的释放-获取的代码: C ...

  4. PHP自定义网站根目录

    1.打开httpd.conf配置文件(xampp下apache文件夹中的conf里) Ctrl + F 查找documentroot 找到结果 改好后保存,并重启apache

  5. 「LuoguP1341」 无序字母对(欧拉回路

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  6. angular之两种路由

    安装angular npm install -g @angular/cli ng new myapp ng g component componentName 自带路由 引入:angular-rout ...

  7. C++之log4cpp库的使用

    log4..简介 log4..是基于log4j的一系列的c++移植版本,使用了log4j的模式结构,目前主要有以下几个版本: 1. log4cxx, 目前是到0.10.0版,Apache下的孵化项目, ...

  8. 微信小程序内嵌网页能力开放 小程序支持内嵌网页文档说明

    为了方便开发者灵活配置微信小程序,张小龙现在开放了小程序的内嵌网页功能,这是一个非常大的惊喜啊,以后意味着你只要开放一个手机端网站,就可以制作一个小程序了哦.操作方法1.开发者登录微信小程序后台,选择 ...

  9. Jasper:API / API 策略和最佳做法

    ylbtech-Jasper:API / API 策略和最佳做法 1.返回顶部 1. API 策略和最佳做法 Cisco Jasper 已经建立了一项 API 公平使用策略,确保所有 Control  ...

  10. python -m json.tool 中文乱码 Format JSON with python

    现在以 json 为数据传输格式的 RESTful 接口非常流行.为调试这样的接口,一个常用的办法是使用 curl 命令: curl http://somehost.com/some-restful- ...