建立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. 与前端对接 jsonp

    主要是回调的写法,前端人员接受的数据格式      参数 (jsonString);

  2. Oracle 学习总结 - 表和索引的性能优化

    表的性能 表的性能取决于创建表之前所应用的数据库特性,数据库->表空间->表,创建数据库时确保为每个用户创建一个默认的永久表空间和临时表空间并使用本地管理,创建表空间设为本地管理并且自动段 ...

  3. 新装kafka与zookeeper配置

    zookeeper配置 dataDir=/opt/kafka_2.11-2.0.0/data/zookeeper # 尽量不要放在tmp# the port at which the clients ...

  4. 观察者模式——Head First

    一.定义 观察者模式(Observer Pattern)定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 二.类图 三.气象站 //Subject p ...

  5. 关于 SAXParseException Content is not allowed in Prolog (前言中不允许有内容)

    解析 XML 文件的时候,如 Mybatis 的 Mapper 文件,有时会出现 org.xml.sax.SAXParseException 前言中不允许有内容 的异常,英文就是 Content is ...

  6. [CI]CodeIgniter快速开发指南

    ---------------------------------------------------------------------------------------------------- ...

  7. 13.Java国际化.md

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  8. 16.3 authguard 通过routing path控制显示URL 通过ngif显示和隐藏

    显示或者隐藏component 通常情况下 我们的做法是把它做成class 以上两步完成,我们就可以用service了,再此之前,我们先 这样弄完以后 . 非登录状态键入上面地址会自动返回下面的地址 ...

  9. UILabel的一些属性

    1.0  lineBreakMode 1.1.0 NSLineBreakByWordWrapping = 0,  以字符为显示单位显示,后面部分省略不显示 NSLineBreakByCharWrapp ...

  10. java容器的理解(collection)

    容器类(Conllection)对于一个开发者来说是最强大的工具之一,可以大幅提高编程能力.容器是一个将多个元素组合到一个单元的对象,是代表一组对象的对象,容器中的对象成为它的元素. 容器适用于处理各 ...