socket_server

客户端程序

import socket, os, json

class Ftcplient(object):
def __init__(self): """
初始化一个socket
""" self.client = socket.socket()
def client_connect(self, ip, port):
"""
实现端口的连接
""" self.client.connect((ip, port)) def help(self):
"""
帮助窗口
""" msg = {
'''
ls
pwd
cd /
get filename
put filename
'''
}
print(msg)
def interative(self):
"""
用户交互程序
""" while True:
cmd = input('>>').strip()
if len(cmd) == 0 or not cmd:
break action = cmd.split()[0] #判断用户输入的动作
if hasattr(self, 'cmd_' + action): #如果动作存在调用内部程序,不存在启用帮助程序
func = getattr(self, 'cmd_' + action)
func(cmd)
else:
help() def cmd_load(self, *args):
"""
上传文件程序 """
cmd_split = args[0]
filename = cmd_split.split()[1]
if os.path.isfile(filename):
while True: size = os.stat(filename).st_size
file_msg = {
'action':'load',
'filename' : filename,
'filesize' : size,
'overriden' : True
}
self.client.send(json.dumps(file_msg).encode('utf-8'))
f = open(filename, 'rb')
self.client.recv(1024)
for line in f :
self.client.send(line) else:
print('the file has send finish')
f.close()
break ftp = Ftcplient()
ftp.client_connect('localhost', 5500)
ftp.interative()

服务器端程序 这里用的是socket_server

import socketserver, json

class MyTCPHandler(socketserver.BaseRequestHandler):  # 条件1,自己创建一个类
def handle(self): # 重写父类中的handle()
"""
socketserver 主要的运行窗口 """
while True: self.data = self.request.recv(1024)
if not self.data or len(self.data) == 0:
break
cmd = self.data.decode()
cmd = json.loads(cmd)
action = cmd['action'] if hasattr(self, action):
func = getattr(self, action)
func(cmd) def load(self, *args):
"""
用于文件的下载 """ load_split = args[0]
filesize = load_split['filesize']
filename = load_split['filename']
self.request.send('ok'.encode('utf-8'))
if len(filename.split('.')) > 0: #判断输入的文件名是文件格式如1.txt
f = open('new_'+ filename, 'wb')
receive_size = 0
while receive_size < filesize:
receive_info = self.request.recv(1024)
f.write(receive_info)
receive_size += len(receive_info) # print("{} wrote:".format(self.client_address[0])) if __name__ == "__main__":
HOST, PORT = "localhost", 5500
# Create the server, binding to localhost on port 9999
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) # 实例化ThreadingTCPServer,并传递(端口号+IP),和请求类名
server.serve_forever() # 关闭

简单的socket_server 和 socket_client(实现文件的上传功能)的更多相关文章

  1. 020 文件(图片)上传功能---涉及switchhost和Nginx的使用

    文件的上传并不只是在品牌管理中有需求,以后的其它服务也可能需要,因此我们创建一个独立的微服务,专门处理各种上传. 1.搭建模块 (1)创建模块 (2)依赖 我们需要EurekaClient和web依赖 ...

  2. layui的多文件列表上传功能前端代码

    html页面的代码(注意:引入layui相关的css): <div class="layui-upload" style="margin-left: 130px&q ...

  3. 文件/大文件上传功能实现(JS+PHP)全过程

    文件/大文件上传功能实现(JS+PHP) 参考博文:掘金-橙红年代 前端大文件上传 路漫漫 其修远 PHP + JS 实现大文件分割上传 本文是学习文件上传后的学习总结文章,从无到有实现文件上传功能, ...

  4. 使用element的upload组件实现一个完整的文件上传功能(下)

    本篇文章是<使用element的upload组件实现一个完整的文件上传功能(上)>的续篇. 话不多说,接着上一篇直接开始 一.功能完善—保存表格中每一列的文件列表状态 1.思路 保存表格中 ...

  5. java文件分片上传,断点续传

    百度的webUploader的前端开源插件实现的大文件分片上传功能 前端部分 前端页面代码如下,只需要修改自己的文件上传地址接口地址: <!DOCTYPE html> <html l ...

  6. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  7. 通过微软的HTML Help Workshop 利用.html文件 生成简单的chm帮助类的文件

    1.下载并安装Microsoft HTML Help Workshop 下载链接:http://www.microsoft.com/en-us/download/details.aspx?id=211 ...

  8. java压缩 GZIP进行简单压缩,ZIP进行多文件保存

    java压缩  GZIP进行简单压缩,ZIP进行多文件保存 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmdydWkxOTg4/font/5a6 ...

  9. 简单的文件ftp上传

    目录 简单的文件ftp上传 简单的文件ftp上传 server import socket import struct service=socket.socket() service.bind(('1 ...

随机推荐

  1. 【python下使用OpenCV实现计算机视觉读书笔记3】读写视频文件

    代码例如以下: import cv2 videoCapture = cv2.VideoCapture('car.avi') fps = videoCapture.get(cv2.cv.CV_CAP_P ...

  2. JMeter分布式部署的大致步骤以及误区解释

    master和slave机要在同一网段内,才能做分布式(Jmeter要配环境变量,这样不用手动起server) 分布式不成功,解决方案: 1.master端和slave端要ping通 2.ping通后 ...

  3. mysql 聚簇索引、非聚簇索引的区别

    索引分为聚簇索引和非聚簇索引. 以一本英文课本为例,要找第8课,直接翻书,若先翻到第5课,则往后翻,再翻到第10课,则又往前翻.这本书本身就是一个索引,即"聚簇索引". 如果要找& ...

  4. telinit:Did not receive a reply.Possible causes include:the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired

    问题: Enabling /etc/fstab swaps: [ok]telinit:Did not receive a reply.Possible causes include:the remot ...

  5. sklearn的画图

    from sklearn.metrics import roc_curve fpr, tpr, thresholds=roc_curve(y_train_5, y_scores) fpr, tpr & ...

  6. Selenium2+python自动化40-cookie相关操作

    前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...

  7. 什么是Asp.net Core?和 .net core有什么区别?(转)

    什么是Asp.Net core 我相信很多C# Developer已经对于.net core不算陌生了,就算没有正式使用相信也应该有所了解.微软在推出来.net core的同时为了方便一些原有的项目可 ...

  8. yii framework config 可以被配置的项目

    http://hi.baidu.com/lossless1009/item/990fdb33a52ffcf1e7bb7a4c <?php002 003 // 取消下行的注释,来定义一个路径别名0 ...

  9. C/C++基础----类

    IO类属于不能被拷贝的类型,因此只能通过引用来传递.同时读取和写入操作都会改变流的内容,所以接收的是普通引用. 类内的友元声明仅仅指定了访问的权限,需要在友元声明之外再专门对函数进行一次声明. 可变数 ...

  10. springMVC学习(11)-json数据交互和RESTful支持

    一.json数据交互: json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据. springMVC进行json交 ...