一、UDP协议(数据报协议)

1、何为udp协议

不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

以太网头 ip头                      udp头                            数据                                           

2、udp协议的特点

(1)传输数据以数据报的形式传送。因为数据以数据包的形式发送,所以没发送一次就会接收一次

from socket import *

server=socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8081)) print(server.recvfrom(1024))
print(server.recvfrom(1024))
print(server.recvfrom(1024)) # (b'hello', ('127.0.0.1', 56816))
# (b'world', ('127.0.0.1', 56816))
# (b'sdfas', ('127.0.0.1', 56816))

服务端

from socket import *

client=socket(AF_INET,SOCK_DGRAM)

client.sendto(b'hello',('127.0.0.1',8888))
client.sendto(b'world',('127.0.0.1',8888))
client.sendto(b'sdfas',('127.0.0.1',8888))

客户端

二、基于udp协议的套接字

udp是无链接的,先启动哪一端都不会报错

from socket import *

# 1.创建套接字对象
server = socket(AF_INET, SOCK_DGRAM) # 2.绑定服务器IP地址和端口号
server.bind(('127.0.0.1', 8888)) # 3.收发消息
while True:
data, cli_addr = server.recvfrom(1024) # 收到的是数据和客户端地址
print(data)
server.sendto(data.upper(), cli_addr) # 发送消息,根据客户端地址发送消息 server.close()

服务端

from socket import *

# 1.创建套接字对象
server = socket(AF_INET, SOCK_DGRAM) # 2.发收消息
while True:
client.sendto('hello'.encode('utf-8'), ('127.0.0.1', 8888)) # 根据地址发送消息
data, ser_addr = client.recvfrom(1024) # 收消息,获得服务端的消息和地址
print(data)

客户端

三、socketserver模块

1、作用

利用socketserver模块可以实现并发

2、基于TCP协议的并发

自定义类中:

  1. self.request  即一个套接字对象
  2. self.client_address  即客户端地址
# 服务端
import socketserver class MyTCPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True: # 通信循环
try:
data = self.request.recv(1024)
print(data.decode('utf-8'))
self.request.send(data.upper())
except ConnectionResetError:
break if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8888), MyTCPHandler)
server.serve_forever() # 链接循环
# 客户端
from socket import * cli_socket = socket(AF_INET, SOCK_STREAM) cli_socket.connect(('127.0.0.1', 8888)) while True:
cli_socket.send('hello'.encode('utf-8'))
data = cli_socket.recv(1024)
print(data.decode('utf-8')) cli_socket.close()

3、基于UDP协议的并发

自定义类中:

  1. self.request是一个元组(第一个元素是客户端发来的数据,第二部分是服务端的udp套接字对象),如(b'adsf', <socket.socket fd=200, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8080)>)
  2. self.client_address即客户端地址
# 服务端
import socketserver class MyUDPHandler(socketserver.BaseRequestHandler):
def handle(self):
while True: # 通信循环
print(self.request) # (b'hello', <socket.socket fd=216, family=AddressFamily.AF_INET,
type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8888)>)
data, sock = self.request
sock.sendto(data.upper(), self.client_address) if __name__ == '__main__':
server = socketserver.ThreadingUDPServer(('127.0.0.1', 8888), MyUDPHandler)
server.serve_forever() # 链接循环
#客户端
from socket import * cli_socket = socket(AF_INET, SOCK_STREAM) while True:
cli_socket.sendto('hello'.encode('utf-8'), ('127.0.0.1', 8888))
data, server_addr = cli_socket.recvfrom(1024)
print(data.decode('utf-8')) cli_socket.close()

网络编程(四)--基于udp协议的套接字、socketserver模块的更多相关文章

  1. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  2. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  3. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  4. 基于udp协议的套接字,socketserver模块,多道技术,进程理论

    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念 进程vs程序 程序:一堆的代码 进程:程序执行的过程 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统的其他所有 ...

  5. python 之 网络编程(基于TCP协议的套接字通信操作)

    第八章网络编程 8.1 基于TCP协议的套接字通信 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连 ...

  6. 网络编程(四)——基于udp协议的套接字socket、socketserver模块的使用

    基于udp协议的套接字.socketserver模块 一.UDP协议(数据报协议) 1.何为udp协议 不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包. ...

  7. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  8. 网络编程[第二篇]基于udp协议的套接字编程

    udp协议下的套接字编程 一.udp是无链接的    不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...

  9. 网络编程基础:粘包现象、基于UDP协议的套接字

    粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv(2014) , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时 ...

随机推荐

  1. 获取客户端IP地址的三个HTTP请求头的区别

    一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用透明代理服务器的情况 ...

  2. 误删除/boot ,如何修复

    进入救援模式 1.chroot /mnt/sysimage  将路径修改为 /mnt/sysimage 2.mkdir /mnt/temp mount /dev/sr0 /mnt/temp 挂载光盘 ...

  3. Error running 'xxx': Command line is too long. Shorten command line for xxx

    跑单元测试时,报错如下: Error running 'xxx': Command line is too long. Shorten command line for xxx 解决方案: 在项目所在 ...

  4. oracle--报错 ORA-00257

    [oracle@oracle01 ~]$ rman target/ RMAN-: =========================================================== ...

  5. GreenPlum 大数据平台--监控

    数据库状态监控活动 活动 过程 纠正措施 列出当前状态为down的Segment.如果有任何行被返回,就会生成一个警告或者告警. 推荐频率:每5到10分钟 重要度: IMPORTANT 在postgr ...

  6. OAuth2、OpenID、SMAL 对比

    对比点 OAuth2.0 OpenID SMAL2 票据格式 JSON or SAML2 JSON XML 支持授权 Yes Yes Yes 支持认证 “伪认证” Yes Yes 创建年份 2005 ...

  7. DataSet 反射转换成 List<T>

    /// <summary> /// DataSet转换成指定返回类型的实体集合 /// </summary> /// <typeparam name="T&qu ...

  8. swagger Unable to render this definition

    Unable to render this definition The provided definition does not specify a valid version field. Ple ...

  9. 使用WCF-SQL一次Insert多个表

    在Visual Studio中新增生成项目     选择适配器类型     选择WCF-SQL适配器   创建连接选项   选择相应的存储过程   生成相应的消息架构  

  10. CI/CD之Gitlab集成Jenkins多分支pipeline实现质量检测和自动发布

    本次实施主要实现: 代码提交gitlab,自动触发Jenkins构建 gitlab发起Merge Request, 需要Jenkins检查通过才可以merge,实现代码review和质量管控 gitl ...