zoukankan      html  css  js  c++  java
  • day 25 udp, socketserver

    建立UDP连接的示例:

    # server端
    
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.bind(('127.0.0.1', 10010))
    while True:
        conn, addr  = sk.recvfrom(1024)
        print(conn.decode())
        msg = input('>>>: ')
        sk.sendto(msg.encode(),addr)
        if msg == 'q': break
    
    sk.close()
    # client 端
    
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1', 10010))
    while True:
        msg = sk.recv(1024)
        print(msg.decode())
        msg1 = input('>>>>: ')
        sk.send(msg1.encode())

    socketserver示例:

    # server端
    import socketserver
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            conn = self.request
            while True:
                msg = input('>>>.')
                conn.send(msg.encode())
                msg = conn.recv(1024)
                print(msg.decode())
    
    server = socketserver.ThreadingTCPServer(('127.0.0.1',10010),Myserver)
    server.serve_forever()
    client端
    
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1', 10010))
    while True:
        msg = sk.recv(1024)
        print(msg.decode())
        msg1 = input('>>>>: ')
        sk.send(msg1.encode())

    文件下载:(文件上传则相反)

    # server端
    
    import os
    import json
    import socket
    import struct
    
    
    file_path = r'E:study	eacherday22 视频以及笔记2 深圳骑士计划脱产班3期 day22 面向对象之反射.mp4'
    file_size = os.path.getsize(file_path)   # 获得文件大小
    file_name = os.path.basename(file_path)     # 获得文件名
    file_info = {'file_size': file_size, 'file_name': file_name, 'operate': 'download'}
    json_file_info = json.dumps(file_info)   # json字典,用于网络传输
    len_json_file_info = len(json_file_info)  # 求出json后字典bytes的长度
    bytes_json_file_info = json_file_info.encode()  # 将字典json后 在转换成bytes格式
    
    sk = socket.socket()
    sk.bind(('127.0.0.1', 10010))
    sk.listen()
    
    conn ,addr = sk.accept()
    conn.send(struct.pack('i', len_json_file_info))  # 发送struck后的len字典长度
    conn.send(bytes_json_file_info)   # 发送字典
    
    while file_size > 0:
        with open(file_path, 'rb') as f:
            count = f.read(2048)  # 每次读2048字节
            conn.send(count)    # 发送读取到的内容
            file_size -= len(count)  # 总大小,减去已发送的大小
    
    conn.close()
    sk.close()
    # client 端
    
    import socket
    import struct
    import json
    
    sk = socket.socket()
    sk.connect(('127.0.0.1', 10010))
    len_info = sk.recv(4)  # 收到4个字节,内容为struct了字典长度
    len_file_info = struct.unpack('i', len_info)[0]  # 结struct包,拿元组第一个元素,就是字典的长度
    file_info = sk.recv(len_file_info).decode() # 按照字典长度,接收相应的数据,并解码
    info_dic = json.loads(file_info)  # 字典去json化
    
    
    with open(info_dic['file_name'], 'wb') as f1:
        while info_dic['file_size'] > 0:
            count = sk.recv(2048)
            f1.write(count)
            info_dic['file_size'] -= len(count)
    sk.close()
  • 相关阅读:
    关于Certificate、Provisioning Profile
    苹果开发者账号类型
    在 iTunes Connect 中,无法找到“My Apps”选项
    iOS 开发,相关网址
    dart 使用
    initState 必须调用 super.initState(); 否则报错
    TabBar 设置可滚动:isScrollable: true
    flutter 从创建到渲染的大体流程
    获取对象State的方法
    beforeRouteEnter 与 beforeRouteUpdate(watch $route 对象) 的区别
  • 原文地址:https://www.cnblogs.com/echo2019/p/10309441.html
Copyright © 2011-2022 走看看