socket_server

客户端程序

  1. import socket, os, json
  2.  
  3. class Ftcplient(object):
  4. def __init__(self):
  5.  
  6. """
  7. 初始化一个socket
  8. """
  9.  
  10. self.client = socket.socket()
  11. def client_connect(self, ip, port):
  12. """
  13. 实现端口的连接
  14. """
  15.  
  16. self.client.connect((ip, port))
  17.  
  18. def help(self):
  19. """
  20. 帮助窗口
  21. """
  22.  
  23. msg = {
  24. '''
  25. ls
  26. pwd
  27. cd /
  28. get filename
  29. put filename
  30. '''
  31. }
  32. print(msg)
  33. def interative(self):
  34. """
  35. 用户交互程序
  36. """
  37.  
  38. while True:
  39. cmd = input('>>').strip()
  40. if len(cmd) == 0 or not cmd:
  41. break
  42.  
  43. action = cmd.split()[0] #判断用户输入的动作
  44. if hasattr(self, 'cmd_' + action): #如果动作存在调用内部程序,不存在启用帮助程序
  45. func = getattr(self, 'cmd_' + action)
  46. func(cmd)
  47. else:
  48. help()
  49.  
  50. def cmd_load(self, *args):
  51. """
  52. 上传文件程序
  53.  
  54. """
  55. cmd_split = args[0]
  56. filename = cmd_split.split()[1]
  57. if os.path.isfile(filename):
  58. while True:
  59.  
  60. size = os.stat(filename).st_size
  61. file_msg = {
  62. 'action':'load',
  63. 'filename' : filename,
  64. 'filesize' : size,
  65. 'overriden' : True
  66. }
  67. self.client.send(json.dumps(file_msg).encode('utf-8'))
  68. f = open(filename, 'rb')
  69. self.client.recv(1024)
  70. for line in f :
  71. self.client.send(line)
  72.  
  73. else:
  74. print('the file has send finish')
  75. f.close()
  76. break
  77.  
  78. ftp = Ftcplient()
  79. ftp.client_connect('localhost', 5500)
  80. ftp.interative()

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

  1. import socketserver, json
  2.  
  3. class MyTCPHandler(socketserver.BaseRequestHandler): # 条件1,自己创建一个类
  4. def handle(self): # 重写父类中的handle()
  5. """
  6. socketserver 主要的运行窗口
  7.  
  8. """
  9. while True:
  10.  
  11. self.data = self.request.recv(1024)
  12. if not self.data or len(self.data) == 0:
  13. break
  14. cmd = self.data.decode()
  15. cmd = json.loads(cmd)
  16. action = cmd['action']
  17.  
  18. if hasattr(self, action):
  19. func = getattr(self, action)
  20. func(cmd)
  21.  
  22. def load(self, *args):
  23. """
  24. 用于文件的下载
  25.  
  26. """
  27.  
  28. load_split = args[0]
  29. filesize = load_split['filesize']
  30. filename = load_split['filename']
  31. self.request.send('ok'.encode('utf-8'))
  32. if len(filename.split('.')) > 0: #判断输入的文件名是文件格式如1.txt
  33. f = open('new_'+ filename, 'wb')
  34. receive_size = 0
  35. while receive_size < filesize:
  36. receive_info = self.request.recv(1024)
  37. f.write(receive_info)
  38. receive_size += len(receive_info)
  39.  
  40. # print("{} wrote:".format(self.client_address[0]))
  41.  
  42. if __name__ == "__main__":
  43. HOST, PORT = "localhost", 5500
  44. # Create the server, binding to localhost on port 9999
  45. server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) # 实例化ThreadingTCPServer,并传递(端口号+IP),和请求类名
  46. 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. MySQL删除超大表操作

    ======================================================================== 问题原因 通常情况下,会使用innodb_file_p ...

  2. SharePoint2010 安装时报“未能启动数据库服务 MSSQL$Sharepoint"解决办法

    对于已经安装sql server 的情况 今天装SharePointFoundation遇到“未能启动数据库服务 MSSQL$Sharepoint”搜了下有如下解决办法 “HKLM_Local_Mac ...

  3. Python自动发邮件——smtplib和email库和yagmail库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

  4. Oracle 实例恢复

    -======================= -- Oracle 实例恢复 --======================= 一.Oracle实例失败 Oracle实例失败多为实例非一致性关闭所 ...

  5. 理解js事件循环(event loop)

    队列:先进先出 栈:后进先出 javascript的Event Loop 和 Node.js的Event Loop 区别: js(运行在浏览器),有主线程.异步任务队列的概念: node.js使用li ...

  6. php取两个整数的最大公约数算法大全

    php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...

  7. hadoop大数据处理平台与案例

    大数据可以说是从搜索引擎诞生之处就有了,我们熟悉的搜索引擎,如百度搜索引擎.360搜索引擎等可以说是大数据技处理技术的最早的也是比较基础的一种应用.大概在2015年大数据都还不是非常火爆,2015年可 ...

  8. [C++ Primer] : 第13章: 拷贝控制

    拷贝, 赋值与销毁 当定义一个类时, 我们显示地或隐式地指定在此类型的对象拷贝, 移动, 赋值和销毁时做什么. 一个类通过定义5种特殊的成员函数来控制这些操作, 包括: 拷贝构造函数, 拷贝赋值运算符 ...

  9. POSIX 消息队列 之 概述 链接方式

    NAMEmq_overview —— POSIX消息队列概述 DESCRIPTIONPOSIX消息队列允许进程以消息的形式交换数据.此API与System V消息队列(msgget(2),msgsnd ...

  10. 实验十一 C的指针

    指针编程 11.1 #include<stdio.h> int main() { ]={,,,,,,,,,},i,*p,sum=; ],i=;i<;i++,p++) { ==) su ...