Python Socket UDP实时信息通信 单个电脑通信 + 多个电脑通信
2021/7/25 20:40:05
本文主要是介绍Python Socket UDP实时信息通信 单个电脑通信 + 多个电脑通信,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
项目场景:
项目相关背景简述:
将信息通过UDP在两个电脑间进行交互,传输数据类型为Str
在探索代码功能时,首先实现了单个电脑间的UDP通信;然后通过查阅实现了两台电脑的通信,下面将分两种情况进行说明。
问题描述:
在没有接触电脑信息通信之前,我一直觉得从端口读取数据是一件很麻烦的事情,但是当自己真正去做的时候,发现要实现简单的功能并没有那么复杂。 简单描述一下:(1)一台电脑的信息交互
一台电脑使用Python Socket UDP进行信息交互需要知道三个量:分别为地址IP,端口Port,交互信息msg。它们的作用很明显,就举一个生活中常见的例子,我们收某宝、某东快递,需要写一个收货地址,这就是我们的IP,但是只写一个地址,我们是不能准确收到快递的,在大学校园,我们很多人共用一个地址,因此还需要分配一个自提柜号用于投放和取快递,这就是端口的作用,用来信息的发送和收取。
(2)两台电脑之间的信息交互
两台电脑之间的信息交互,就好像你买了东西,且要换货。那么完这两件事情不仅需要你的收货地址,和自提柜端口,还需要商家提供的退货地址和自提柜端口,而货物则是我们需要互相传输的信息。
代码解释:
一、单个电脑之间的信息交互
import socket import time ''' 在任何类型的通信开始之前,网络应用程序都必须创建套接字,socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 send_msg_port 是用于信息发送的套接字 receive_msg_port 是用于信息接收的套接字 ''' send_msg_port = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) receive_msg_port = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ''' 信息接收套接字需要绑定一个接收IP('127.0.0.1')和端口(9000) 地址IP填写:如果是本机地址(不联网可用),填写''或者'127.0.0.1' 端口Port一般选取8000以后的端口,下面代码绑定了端口9000,用于数据的收取。 ''' receive_msg_port.bind(('127.0.0.1', 21000)) send_msg = 'Hello World!' while True: # 设置非阻塞发送信息模式 send_msg_port.setblocking(False) send_msg_port.sendto(order_data.encode('utf-8'), ('127.0.0.1', 21000)) # 地址还可以为'' send_msg_port.sendto(order_data.encode('utf-8'), ('', 21000)) print("------>>>>发送信息成功") # 在本机端口接收信息,接受到两个值,一个为信息,一个为地址 receive_msg, receive_address = receive_msg_port.recvfrom(1024) # 还需要在这里将信息格式进行转化 receive_msg = receive_msg.decode('utf-8') print("信息接收地址/端口:", receive_address,'接收信息:', receive_msg ) time.sleep(0.05)
看到这里,可以通过上面的代码完成一个简单的信息交互,可能对于地址和端口有疑问,下面将讲解我对于端口和地址的几个测试
补充地址的获取
(1) 本机地址:‘127.0.0.1’,’'
(2) 通过win+R,打开cmd,输入ipconfig,即可获取ip地址(一般选取IPv4)
(3) 通过win+R,打开cmd,输入**netstat -ano **,可以查看本机开放的全部端口。通过活动连接协议可看到是UDP还是TCP连接模式,从地址一栏可以看较常使用的地址。
(4) 举例说明
a. 通过 win+R打开cmd,输入ipconfig,获取无线局域网适配器 WLAN
IPv4 地址… … …192.168.1.12(此地址可用于同一个无线网下不同电脑间的信息交互)
b. 通过 win+R打开cmd,输入netstat -ano,查找协议为UDP的行,找到地址**‘127.0.0.1’,‘192.168.123.16’**,第一个可以作为本机地址交互,第二个可以作为局域网信息交互的地址。
二、局域网下多个电脑之间的交互
说明: 在局域网下进行信息交互,首先要确认每台电脑的地址,其次还需要验证是否可以通过地址与其连接,流程如下。
a. 通过输入ipconfig或者netstat -ano获取在无线网的地址;
b. 每台电脑通过打开cmd,输入ping ##(##为其他电脑的地址),验证是否能够通过无线网连接到地址。
输入ping (地址), 然后回车键。如果输出信息丢失率为0%,则证明连接成功!
如果失败,则查阅是否地址输错,或者地址找错(127.0.0.1是本机地址,和别的电脑连接时不用填。)
(1)代码举例
''' 发送信息,需要收信息电脑地址和接收信息的ip 我通过ipconfig、netstat -ano查阅地址为192.168.123.16(每个电脑都不同),自己定义一个端口为21800. ''' import socket send_info_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) send_info = 'Hello, other computers!' while True: send_info_socket .setblocking(False) send_info_socket .sendto(send_info .encode('utf-8'), ('192.168.123.16', 21800)) print("发送成功!")
''' 接收信息,需要信息电脑地址和接收信息的ip 我通过ipconfig、netstat -ano查阅地址为192.168.123.16(每个电脑都不同),自己定义一个端口为21800. ''' import socket receive_info_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)v receive_info_socket .bind(('192.168.123.16', 21800)) whilr True: receive_info = receive_info_socket .recvfrom(1024) receive_info_data = receive_info [0].decode('utf-8') print("接收到来自", receive_info [1], "的信息为:", receive_info_data)
总结:一般来说,地址获取很重要,学会从不同电脑上获取地址是开启不同设备之间信息交互的第一步。学会使用ping加地址验证是否地址连接成功。如果不成功,有很多关于如何打开防火墙,开启网络共享的方式,可以查阅相关问题的解决方法,这里就不多说了。还有需要注意的是端口的选择需要选择未被占用的端口,因为socket很容易出现端口占用的情况导致程序报错,按照文章走一遍你应该可以掌握基本的UDP信息交互方法。
本文总结了利用Python Socket 通过UDP通信协议实现单地址和多地址的信息实时交互方法,有关地址获取和确认方法进行了总结,欢迎批评交流!
这篇关于Python Socket UDP实时信息通信 单个电脑通信 + 多个电脑通信的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器