socket库:Python实现UDP客户和服务器通信

简介: socket库:Python实现UDP客户和服务器通信

前言


前文使用TCP面向流的套接字,今天讲解的UDP的工作方式与TCP/IP不同。UDP是用户数据报协议,是一个面向消息的协议。


一方面,UDP不需要一个长期活动连接,所以建立UDP套接字稍微简单一些。另一方面,UDP消息必须放在一个数据报中。


在IPv4中,数据报包含65507个字节,这些字节信息中还包括首部信息。因为UDP不需要长期的连接,所以它无法得到TCP所能提供的传输保障。


服务器代码


因为UDP并没有连接,所以服务器不需要监听和接收连接。它只需要使用bing()将其套接字与一个端口关联,然后等待各个消息。


示例代码如下:

import socket
# 1.创建一个套接字,
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('localhost', 10000))
while True:
    data, address = sock.recvfrom(4096)
    print(data.decode('UTF-8'), address)
    if data:
        sent = sock.sendto('已接收到你发来的消息'.encode('UTF-8'), address)


其中,recvfrom()表示从套接字读取消息,比如客户但发送消息后,消息与客户但地址都在里面。


至于sendto()很好理解,就是发送消息给别人。参数1表示消息内容,参数2就是发送到哪里(也就是对方的地址)。


客户端代码


客户端当然比服务器更简单,因为UDP不需要连接,可以直接将消息发送到服务器,并使用recvfrom()响应。示例如下:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
    msg = "发送消息到服务器".encode('utf-8')
    sent = sock.sendto(msg, ('localhost', 10000))
    data, server = sock.recvfrom(4096)
    print(data.decode())
finally:
    sock.close()

同样的,这里sock.recvfrom()用于接收服务器反馈的消息内容与地址。运行之后,效果如下所示:



相关文章
|
1天前
|
网络协议 Unix Linux
# 2个类轻松构建高效Socket通信库
本文介绍了一种通过两个类`EpollEventHandler`和`IEpollEvent`构建高效Socket通信库的方法。该库支持TCP、UDP和Unix域套接字,采用I/O多路复用技术(如epoll),提升并发处理能力。通过抽象基类和具体事件类的设计,简化了API使用,便于开发者快速上手。文章还提供了服务端与客户端的实例代码,展示其在实际项目中的应用效果。此Socket库适应嵌入式环境,功能定制性强,有助于减少外部依赖并提升维护效率。
# 2个类轻松构建高效Socket通信库
|
5月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
132 0
Linux C/C++之TCP / UDP通信
|
5月前
|
网络协议 Linux 网络性能优化
Linux基础-socket详解、TCP/UDP
综上所述,Linux下的Socket编程是网络通信的重要组成部分,通过灵活运用TCP和UDP协议,开发者能够构建出满足不同需求的网络应用程序。掌握这些基础知识,是进行更复杂网络编程任务的基石。
257 1
|
5月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
59 0
|
6月前
|
C语言
C语言 网络编程(七)UDP通信创建流程
本文档详细介绍了使用 UDP 协议进行通信的过程,包括创建套接字、发送与接收消息等关键步骤。首先,通过 `socket()` 函数创建套接字,并设置相应的参数。接着,使用 `sendto()` 函数向指定地址发送数据。为了绑定地址,需要调用 `bind()` 函数。接收端则通过 `recvfrom()` 函数接收数据并获取发送方的地址信息。文档还提供了完整的代码示例,展示了如何实现 UDP 的发送端和服务端功能。
|
6月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
89 0
|
6月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息
67 0
|
6月前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息 原创
115 0
|
6月前
|
监控 网络协议 数据库连接
Python3 监控端口:使用 socket 库
Python3 监控端口:使用 socket 库
92 0
|
7月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
124 1

热门文章

最新文章