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()
原文地址:https://www.cnblogs.com/echo2019/p/10309441.html