#tcp serverclass MyHandler(socketserver.BaseRequestHandler):    def handle(self):        # 通信循环        while True:            try:                cmd = self.request.recv(1024)                if len(cmd) == 0:                    break                else:                    cmd = cmd.decode(encoding='utf-8')                if cmd=='up':                    import os

                if cmd == 'get':                    path = 'file.txt'                    total_size = os.path.getsize(filename=path)                    import hashlib                    with open(path, 'rb') as f:                        for line in f:                            line                    hashlib_value = 'xxxx'                else:                    obj = subprocess.Popen(cmd,                                           shell=True,                                           stdout=subprocess.PIPE,                                           stderr=subprocess.PIPE)                    s_out = obj.stdout.read()                    s_err = obj.stderr.read()                    total_size = len(s_out) + len(s_err)                    path = None                    hashlib_value = '你大爷'

                header_dic = {                    'file_name': path,                    'total_size': total_size,                    'hashlib': hashlib_value                }                header_json = (json.dumps(header_dic)).encode(encoding='utf-8')                header_len = struct.pack('i', len(header_json))

                # print(header_len)                self.request.send(header_len)                # print(header_json)                self.request.send(header_json)

                if cmd == 'get':                    with open(path, 'rb') as f:                        for line in f:                            # print(line)                            self.request.send(line)                else:                    # print('cmd')                    self.request.send(s_out)                    self.request.send(s_err)

            except ConnectionResetError:                break

        self.request.close()

if __name__ == "__main__":    s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True)    s.serve_forever()

#tcp clientimport socket, struct, json, hashlib

st = socket.socket(socket.AF_INET, socket.SOCK_STREAM)st.connect(('127.0.0.1', 8080))

def get_file(st):    data = st.recv(4)    data = struct.unpack('i', data)[0]    header_json = json.loads((st.recv(data)).decode('utf-8'))    print(header_json)    file_down = b''    encodeing = None    while header_json['total_size'] > 0:        msg = st.recv(1024)        header_json['total_size'] -= len(msg)        file_down += msg        try:            if encodeing == None:                print(msg.decode(encoding='utf-8'))            else:                print(msg.decode(encodeing='gbk'))        except Exception:            encodeing == False            print(msg.decode(encoding='gbk'))

    return file_down

while True:

    msg = input('请输入').strip()    if not len(msg): continue    try:        st.send(msg.encode('utf-8'))        file_down = get_file(st)

        if msg == 'get':            with open('save.txt', 'wb') as f:                f.write(file_down)            print('end')

    except ConnectionResetError:        break

st.close()

#udp server
import socketserverclass MyHandler(socketserver.BaseRequestHandler):    def handle(self):

        data = self.request[0]        self.request[1].sendto(data.upper(), self.client_address)

if __name__ == '__main__':    ss=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyHandler)    ss.serve_forever()
#udp clientfrom socket import *

st = socket(AF_INET, SOCK_DGRAM)while True:    msg = input('请输入').strip()    if not len(msg): print('不要发送空数据')    st.sendto(msg.encode(encoding='utf-8'), ('127.0.0.1', 8080))    print('发送了数据')    print(st.recvfrom(1024))

st.close()
												

python sockerserver tcp 文件下载 udp的更多相关文章

  1. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  2. 利用python实现TCP和UDP服务器

    利用python的socket模块可以实现基本的网络编程,并且只限于一对一的连接.当然,也可以在其基础上实现一个网络服务器,但由于太底层这种做法不被推荐.其实如果要实现一个网络服务器很简单,调用pyt ...

  3. python中TCP和UDP区别

    TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TCP的应用:Web浏览 ...

  4. python实现tcp文件下载器

    服务器端代码 import socket import os import threading # 处理客户端请求下载文件的操作(从主线程提出来的代码) def deal_client_request ...

  5. 利用Python进行TCP、UDP套接字编程

    参考:http://www.cnblogs.com/whatbeg/p/5155524.html http://www.cnblogs.com/nzyjlr/p/4236287.html

  6. Python基础教程之udp和tcp协议介绍

    Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

  7. python socket 编程(TCP与UDP)

    实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...

  8. python网络编程socket编程(TCP、UDP客户端服务器)

    摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...

  9. python基础-TCP协议和UDP协议

    TCP协议是一种流式协议,UDP协议是一种数据包协议. TCP和UDP是OSI模型中传输层的协议.TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输. TCP和UDP区别总 ...

随机推荐

  1. c 时间 学习

    linux #include <stdio.h> #include <time.h> int main(int argc,char **argv) { //两种时间的获取方法 ...

  2. 重装unbantu 问题集合,下载别人的代码运行问题集合

    安装angular 的时候要全局设置 npm install -g angular-cli nodemon server.js 出现[nodemon] Internal watch failed:xx ...

  3. C#转成时间格式

    public static string GetDatetime()        {            System.Globalization.DateTimeFormatInfo myDTF ...

  4. centos 升级sqlite3

    1.yum remove sqlite3 2. 下载: wget -O sqlite-autoconf-.tar.gz https://www.sqlite.org/2019/sqlite-autoc ...

  5. java 集合 Se HashTreeSet

    Set接口  Set是Collection的子接口,与List相对 Set集合中的元素的特点是1,无序性 2,无下标3,无重复的元素 Set是个接口,所以无法直接创建对象,要依赖它的实现类来创建对象  ...

  6. 2.1、CDH 搭建Hadoop在安装(为Cloudera Manager配置存储库)

    步骤1:为Cloudera Manager配置存储库 使用包管理工具安装Cloudera Manager yum 对于RHEL兼容系统, zypper对于SLES,和 apt-get对于Ubuntu. ...

  7. MyBatis数据库连接的基本使用-补充

    补充1  MyBatis使用过程中,返回值类型可能是Map,不一定是实体类 返回查询结果也可以是一个Map,不一定是实体类 (1)mybatis会先将查询结果返回为一个map,字段名作为key,字段值 ...

  8. Python 面向对象基础(类、实例、方法、属性封装)

    python是面向对象语言,一切皆对象. 面向过程: 变量和函数. “散落” 在文件的各个位置,甚至是不同文件中.看不出变量与函数的相关性,非常不利于维护,设计模式不清晰. 经常导致程序员,忘记某个变 ...

  9. Linux 永久PATH环境变量

    在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用vim在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 例如:编辑/etc ...

  10. 截图软件FastStone

    屏幕截图软件(FastStone Capture) 好用,可以粘贴 / 复制. 可以做页面设计,有屏幕标尺,取色器.