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的进程通信机制,取后一种意 ...
随机推荐
- Android junit4 单元测试 cant open database错误 获取context上下文问题
Context context = getInstrumentation().getTargetContext()这样就能在data/data/包/databases下找到数据库文件了 public ...
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stoc
今天在使用yum安装文件时,出现了以下问题: root@localhost opt]# yum update Loaded plugins: fastestmirror Could not retri ...
- 关于ArcGIS动态图层空间内栅格数据,JS前端显示颜色不正确的解决方案
ArcGIS的动态空间,可承载Table,Shp,Raster等数据. 我们的需求是,每天客户有新的卫星数据,但是不同类型,有多波段Landsat卫星数据,有Modis数据等.不定期更新到共享文件夹, ...
- Web前端行业的了解
即将从事Web前端的工作的 先对即将从事的行业有个了解. Web前端发展史: 第一个网页诞生于90年代初,早期的网页除了一些小图片和毫无布局可言的标题段落,其全由文字构成.然而随着时代的进步,互联网的 ...
- hdu-5670 Machine(水题附上java代码)
题目链接: Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) 问题描 ...
- python 基础之第三天
例子1:8位数的随机密码 #!/usr/bin/python # coding:utf-8 import string import random pwd = '' for i in range(8) ...
- 洛谷p1007独木桥
P1007独木桥 题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥 ...
- react之redux增加删除数字
比如在页面中添加和删除‘222’ action.js export const ADD= 'ADD'; export const RED='RED'; export const add=(str)=& ...
- Python使用multiprocessing实现一个最简单的分布式作业调度系统
Python使用multiprocessing实现一个最简单的分布式作业调度系统介绍Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机 ...
- 关于group_concat函数拼接字符超长的问题
昨天测试的人火急火燎的找我,跟我说数据不对!说明情况后我去查看,原来是数据上有个子查询出来的字段没有完全展示 问题很明显,就是数据被截断了.下面贴上我写的查询 wyids_是正确的显示,通过它子查询出 ...