python标准库 对socket二次封装_Python 标准库 socket 创建UDP连接

前面介绍了创建TCP连接,请见木头人:Python 标准库 socket 套接字网络通讯简介与创建TCP连接​zhuanlan.zhihu.comzhihu-card-default.svg

一、UDP与TCP通讯区别

UDP 无连接,通讯不需要建立连接;它支持一对一,一对多,多对一和多对多的交互通信;TCP尽量保持数据交互,但不能保证交互可靠;UDP 实时信好,效率高,适用于对高速传输和实时性有较高的通信或广播通信。

TCP 面向连接,点到点通讯,通讯前需要建立连接,也就是常说的3次握手;TCP传送的数据,无差错,不丢失,不重复,且按序到达,效率没有UDP高,但它可靠;

UDP 占用系统资源少,TCP占用系统资源比较多。

由于网络的数据与稳定性的提升,网络的丢包率很低,在加上应用层重传保证传输的可靠性,在越来越多的场景下优先考虑UDP。

二、创建UDP服务器通讯端

UDP 不用建立连接,所以不像TCP一样需要很多设置工作,服务器端直接等待进来的连接就好了。

UDP服务端创建链接流程:

创建服务器套接字(ss = socket())

绑定服务器套接字(ss.bind())

服务器无限循环(inf_loop:)

对话(接收与发送)(cs = ss.recvfrom()/ss.sendto())

关闭服务器套接字(ss.close())(可选)

示例:创建一个能接收客户的消息,在消息前加一个时间戳后返回的UDP服务器。

udp_socket_server.py

from socket import *

from time import ctime

HOST = ''

PORT = 8080

BUFSIZ = 1024

ADDR = (HOST, PORT)

udpSerrverSocket=socket(AF_INET,SOCK_DGRAM) # 创建UDP连接

udpSerrverSocket.bind(ADDR) # 绑定服务器地址

while True: # 服务器无线循环

print('等待连接...')

data,addr=udpSerrverSocket.recvfrom(BUFSIZ) # 接受客户的连接

udpSerrverSocket.sendto(bytes('[%s]%s' % (ctime(), data),encoding='utf-8'), addr) # 发送UDP 数据

print( '连接地址:', addr)

udpSerrverSocket.close() # 关闭服务器连接

三、创建UDP客户机通讯端

客服端创建链接流程:

创建客户套接字(ss = socket())

通讯循环(comm_loop:)

对话(接收与发送)(cs.sendto()/cs.recvfrom())

关闭客户套接字(cs.close())

示例:与前面udp_socket_server.py 进行通讯

udp_socket_client.py

from socket import *

HOST = '127.0.0.1' # 服务器连接地址

PORT = 8080 # 服务器启用端口

BUFSIZ = 1024 # 缓冲区大小

ADDR = (HOST, PORT)

udpCliendSocket = socket(AF_INET, SOCK_DGRAM)

while True:

data = bytes(input('> '), encoding="UTF-8")

if not data:

break

udpCliendSocket.sendto(data, ADDR)

data, ADDR = udpCliendSocket.recvfrom(BUFSIZ)

if not data:

break

print (data)

udpCliendSocket.close()

五、运行客户端与服务器程序先运行服务器端程序 (win系统 cmd 窗口命令 python socket_server.py )。

再运行客户端程序 (win系统 重新开 cmd 窗口 命令 python socket_client.py )。

在客户端程序输入内容 Hi woodman 。

服务端输出内容:等待连接...

连接地址: ('127.0.0.1', 51105)

等待连接...

客户端输出内容:b"[Mon Nov 12 09:52:19 2018] b'Hi woodman'"

服务器与客户端通讯流程服务器启动端口监听,监听端口数据报文。

当客户端发送报文数据,(报文包含客户端ip端口,服务器ip端口,需发送的数据)

在客户端接受服务的时候,服务器又回去等待其它客户端的数据报文。

服务器对接收数据并进行处理,将返回数据封装发送到客户端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值