建立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\teacher\day22 视频以及笔记\02 深圳骑士计划脱产班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()

day 25 udp, socketserver的更多相关文章

  1. tcp上传大文件举例、udp实现qq聊天、socketserver模块实现并发

    为什么会出现粘包现象(day31提到过,这里再举个例子) """首先只有在TCP协议中才会出现粘包现象,因为TCP协议是流式协议它的特点是将数据量小并且时间间隔比较短的数 ...

  2. tcp\udp 操作系统发展史

    目录 为什么会出现粘包现象 socket发送大文件示例 UDP协议 基于UDP实现简易版本的qq 总结: SocketServer模块介绍(让tcp也能支持并发) 为什么会出现粘包现象 TCP 三次握 ...

  3. windows常用端口对应表

    端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

  4. port与大全portClose方法

    在网络技术,port(Port)通常,有两种含义:首先,物理意义port,例,ADSL Modem.枢纽.开关.路由器连接其他网络设备的接口,如RJ-45port.SCport等等.第二个是逻辑意义p ...

  5. port大全及port关闭方法

    在网络技术中,port(Port)大致有两种意思:一是物理意义上的port,比方,ADSL Modem.集线器.交换机.路由器用于连接其它网络设备的接口,如RJ-45port.SCport等等.二是逻 ...

  6. 网络基础二 tcp/ip协议簇 端口 三次握手 四次挥手 11种状态集

    第1章 概念介绍 1.1 VLAN 1.1.1 什么是VLAN VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成 ...

  7. 网络-05-端口号-F5-负载均衡设-linux端口详解大全--TCP注册端口号大全备

    [root@test1:Standby] config # [root@test1:Standby] config # [root@test1:Standby] config # [root@test ...

  8. CentOS 7 服务端口表

    # Note that it is presently the policy of IANA to assign a single well-known# port number for both T ...

  9. Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表

    Windows操作系统上各种服务使用的端口号, 以及它们使用的协议的列表 列表如下 Port Protocol Network Service System Service System Servic ...

随机推荐

  1. subsets 回溯 给定集合,枚举子集。元素不重复

    这个回溯感觉掌握的有些熟练了. 两种方式,递归和循环. 感觉就是套框架了. /** * Return an array of arrays of size *returnSize. * The siz ...

  2. Crash 文件调试

    Xcode目录下执行 find . -name symbolicatecrash 找到symbolicatecrash位置,将其拷贝到debug用的文件夹下 执行命令 export DEVELOPER ...

  3. swarm on ubuntu

    转自:https://www.cnblogs.com/jsonhc/p/7862518.html 由于在centos7系统上使用docker-machine安装的swarm实现服务的负载均衡一直失败, ...

  4. C# 容器重用避免GC 的论证

    var lst = new List<int>(); lst.Capacity = ; var cnt = lst.Count; var cp = lst.Capacity; ; i< ...

  5. ref与out

    注意点: ref和out都是按地址传递,使用后都将改变原来参数的数值 方法定义和调用方法都必须显式使用 ref/out 关键字 ref: 作为ref参数传递的变量在方法调用中传递之前必须初始化 out ...

  6. LeetCode OJ 22. Generate Parentheses

    题目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  7. Structs复习 字符编码问题

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...

  8. C++之 模板Template的使用

    转自https://www.cnblogs.com/cynchanpin/p/7127897.html 1.在c++Template中非常多地方都用到了typename与class这两个关键字,并且好 ...

  9. 吴裕雄 python神经网络(7)

    import numpy as npnp.random.randint(0,49,3) # -*- coding:utf-8 -*-import kerasfrom keras.models impo ...

  10. Winform 学生管理系统增删改查

    数据库: create database adonet go use adonet go create table xue ( code ), name ), sex bit, birth datet ...