2025年1月22日(网络编程 udp)

server/2025/2/6 0:19:38/

系统信息:

ubuntu 16.04LTS
Raspberry Pi Zero 2W
系统版本: 2024-10-22-raspios-bullseye-armhf
Python 版本:Python 3.9.2
已安装 pip3
支持拍摄 1080p 30 (1092*1080), 720p 60 (1280*720), 60/90 (640*480)
已安装 vim
已安装 git


学习目标:


学习内容:

CA CE
udp 基本使用

在这里插入图片描述

循环发送

在这里插入图片描述

循环发送

python">import socketdef main():# 1. 创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2. 绑定本地信息udp_socket.bind(("192.168.0.178", 8080))# 3. 接收数据recv_data = udp_socket.recvfrom(1024)# 4. 打印接收的数据# 元组# (b'Welcome to NetAssist', ('192.168.0.178', 8081))print(recv_data)# 5. 关闭套接字udp_socket.close()if __name__ == "__main__":main()

解析接收的数据

python">import socketdef main():# 1. 创建套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 2. 绑定本地信息udp_socket.bind(("192.168.0.178", 8080))while True:# 3. 接收数据recv_data = udp_socket.recvfrom(1024)# 4. 打印接收的数据# 元组# (b'Welcome to NetAssist', ('192.168.0.178', 8081))print(recv_data)recv_msg = recv_data[0]recv_addr = recv_data[1]print("%s : %s" % (str(recv_addr), recv_msg.decode("utf-8")))# BUGif recv_msg.decode("utf-8") == "exit":break# 5. 关闭套接字udp_socket.close()if __name__ == "__main__":main()

绑定端口发送数据

python">import socketdef main():# 创建一个 udp 套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定本地信息udp_socket.bind(("192.168.0.178", 8080))while True:# 发送的数据send_data = input("请输入:")# 用户选择关闭if send_data == "exit":break# 收发数据udp_socket.sendto(send_data.encode("utf-8"), ("192.168.0.178", 8081))# 关闭套接字udp_socket.close()if __name__ == "__main__":main()

请添加图片描述

在使用 Python 的 socket 模块进行网络编程时,可能会遇到阻塞(blocking)问题。阻塞通常发生在网络 I/O 操作中,例如 recv() 或 accept() 方法,这些操作会等待数据到达或客户端连接,导致程序暂停执行。

在通信和数据传输中,单工、半双工和全双工是三种不同的通信模式。它们的主要区别在于数据传输的方向性。以下是这三种模式的简要说明:

1. 单工 (Simplex)

  • 定义:单工通信是指数据只能单向传输的模式。信息只能从发送方传输到接收方,接收方无法向发送方发送信息。
  • 例子:电视广播、传统的广播电台。

2. 半双工 (Half-Duplex)

  • 定义:半双工通信允许数据在两个方向上传输,但不能同时进行。在任何时刻,数据只能在一个方向上传输。
  • 例子:对讲机、一些无线通信设备。

3. 全双工 (Full-Duplex)

  • 定义:全双工通信允许数据在两个方向上同时传输。发送方和接收方可以同时发送和接收信息。
  • 例子:电话通话、现代网络通信(如以太网)。

总结表

通信模式传输方向示例
单工单向电视广播
半双工双向(不同时)对讲机
全双工双向(同时)电话通话

这些通信模式在不同的应用场景中有各自的优势和局限性,选择合适的模式可以提高通信效率和效果。

udp聊天

python">import socketdef send_data(udp_socket):sd_data = input("请输入:")udp_socket.sendto(sd_data.encode("utf-8"), ("192.168.0.178", 8081))def recv_data(udp_socket):rv_data = udp_socket.recvfrom(1024)# 打印接收的数据recv_msg = rv_data[0]recv_addr = rv_data[1]print("%s : %s" % (str(recv_addr), recv_msg.decode("utf-8")))def main():# 创建一个 udp 套接字udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)udp_socket.bind(("192.168.0.178", 8080))while True:print("--- 选项 ---")print("1.发送")print("2.接收")print("3.退出")print("-----------")op = input("请输入:")# 发送的数据if op == "1":send_data(udp_socket)# 收数据elif op == "2":recv_data(udp_socket)elif op == "3":breakelse:print("输入有误")# 关闭套接字udp_socket.close()if __name__ == "__main__":main()

http://www.ppmy.cn/server/165275.html

相关文章

前端 | 浅拷贝深拷贝

在前端开发中,我们经常需要复制对象或数组,但不同的复制方式可能会影响数据的完整性和应用的稳定性。本文将深入探讨浅拷贝(Shallow Copy)和深拷贝(Deep Copy)的区别、实现方式及适用场景。 1. 浅拷贝 1.…

Spring Boot常用注解深度解析:从入门到精通

今天,这篇文章带你将深入理解Spring Boot中30常用注解,通过代码示例和关系图,帮助你彻底掌握Spring核心注解的使用场景和内在联系。 一、启动类与核心注解 1.1 SpringBootApplication 组合注解: SpringBootApplication Confi…

Workbench 中的热源仿真

探索使用自定义工具对移动热源进行建模及其在不同行业中的应用。 了解热源动力学 对移动热源进行建模为各种工业过程和应用提供了有价值的见解。激光加热和材料加工使用许多激光束来加热、焊接或切割材料。尽管在某些情况下,热源 (q) 不是通…

DeepSeek的崛起与全球科技市场的震荡

引言 近年来,人工智能(AI)技术的快速发展不断重塑全球科技格局。 近日,中国初创企业DeepSeek推出了一款据称成本极低且性能强大的AI模型,引发全球市场的剧烈反应。NVIDIA、台积电等半导体和AI科技巨头股价大幅下跌&am…

两栏布局、三栏布局、水平垂直居中

文章目录 1 两栏布局1.1 浮动 margin1.2 浮动 BFC1.3 flex布局1.4 左绝父相 margin1.5 右绝父相 方向定位 2 三栏布局2.1 子绝父相 margin2.2 flex布局2.3 浮动 margin2.4 圣杯布局2.5 双飞翼布局 3 水平垂直居中3.1 绝对定位 translate3.2 绝对定位 margin3.3 绝对定位…

Android-音频采集

前言 音视频这块,首先是要先采集音频。今天我们就来深入探讨一下 Android 音频采集的两大类型:Mic 音频采集和系统音频采集。 Mic音频采集 Android提供了两个API用于实现录音功能:android.media.AudioRecord、android.media.MediaRecorder。…

从Transformer到世界模型:AGI核心架构演进

文章目录 引言:架构革命推动AGI进化一、Transformer:重新定义序列建模1.1 注意力机制的革命性突破1.2 从NLP到跨模态演进1.3 规模扩展的黄金定律二、通向世界模型的关键跃迁2.1 从语言模型到认知架构2.2 世界模型的核心特征2.3 混合架构的突破三、构建世界模型的技术路径3.1 …

Flink报错Caused by: java.io.FileNotFoundException: /home/wc.txt

当在提交一个flink任务报如下的错误时: Caused by: java.io.FileNotFoundException: /home/wc.txt (没有那个文件或目录)at java.io.FileInputStream.open0(Native Method)at java.io.FileInputStream.open(FileInputStream.java:195)at java.io.FileInputStream.&…