大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
使用Python进行UDP编程
实际遇到需要解决问题真是最好的老师,断更了两天,主要还是自己贪玩了,没有把握好时间,另外就是我一直在研究怎么入手通过SFP光口来控制高精度电源。
1 SFP光口
为什么使用SFP光口而不是直接以太网,主要是SFP光口可以达到10GHz的刷新频率,而网口只能支持1Hz的刷新频率。这就是最大的实际应用场景区别要求。因为我最终的目的是需要另一台FPGA通过SFP连接电源上的SFP光口。故需要探究看看怎么通过SFP控制。
首先根据说明手册,发现就只是告诉如下信息:
- 告诉了连接方式,如何连接:星型连接,直接连接等。
- UDP的帧的各个含义
- 1000M Base-T 1000Base-X 千兆网线
千兆口一般有电口即RJ45和光口即SFP。
发现仔细阅读了一遍说明书,还是一头雾水,还是没有告诉你该怎么控制,一点头绪没有。一定还是不要害羞尽管找技术支持,因为我的是意大利电源,所以主要是通过发邮件,幸好遇到的技术支持人非常的及时,基本第二天就给我回复消息了,当然你也绝不能指望他能给你有更大的帮助,只是最起码能验证自己心里的猜想,我又问他要了一个demo,他给我发了一段python代码。
2 解决方案一(有待验证,看是否成功)
我原本以为是要在另一台FPGA上写UDP呢,这可就难了,而且还需要别人的帮助,这就不是自己能掌控的事情了,最主要的事情就是python代码就根本用不上了。这有点不符合技术支持的意思。
想办法怎么使用PC和电源的SFP口连接上—》就想到了交换机
找到了 千兆光口和千兆网口的交换机 解决PC和电源上SFP光口的连接问题。
- 买交换机
这个是TP-LINK的产品,看了一下还不贵,不到200块钱,明天可以找导师去买一下,即使失败了 以后也能用上。
2.学习python来UDP编程
在网上找了UDP编程的例子,就是自己利用一个本地回环127.0.0.1进行测试喜爱,发现是可以的,同时对于每个语句的功能看懂。
分别分为服务端 和客户端两个程序,并且分别运行。
需要知道以下概念基本知识点:
IP:它是用来标识处于Internet之中的端系统的。
MAC:它是用于在同一局域网中标识不同的计算机的。
端口号:它是用来标识同一台主机上不同的网路应用程序的。
套接字:应用程序进行通信的一种抽象机制。每一个进程都有一个或者多个套接字。当生成一个套接字的时候,就会为它分配一个端口号。我们是在C/S架构上应用UDP套接字编程。那么,服务器总是在等待客户端的请求。客户端在请求的时候,它会告知目的地址(服务器的IP地址和目的进程的端口号)。
- 服务端程序
#python3实现循环无连接服务器
#包含socket库
from socket import *;
#服务器端口
server_port = 8000;
#创建套接字,设置Ipv4地址以及指定UDP连接
server_socket = socket(AF_INET,SOCK_DGRAM);
#绑定IP地址和端口号。监听该端口
server_socket.bind(('',server_port));
while True:
print("receive data:");
#从客户端发来的包中获取数据存放在data中,将源地址放在client_address中。
#设置缓存大小为4096。完成这些功能需要使用函数recvfrom.
data,client_address = server_socket.recvfrom(4096);
print(data.decode()); #打印客户端的数
server_socket.sendto(("success!").encode(),client_address); # encode()进行编码
server_socket.close();
- 客户端程序
#python3实现循环无连接服务器
#包含socket库
#python3实现的客户端代码
#包含网络模块
from socket import *;
#服务器地址以及端口号
#127.0.0.1是本地回环地址,经常用来进行测试,也可以使用域名localhost来代替该ip地址
server_address = '127.0.0.1';
server_port = 8000;
#创建套接字 ipv4地址以及UDP协议
client_socket = socket(AF_INET,SOCK_DGRAM);
while True:
data = input("please input:");
client_socket.sendto(data.encode(),(server_address,server_port)); # 第一个参数是 内容,第二个参数是要发给的IP地址和端口
recv,server_addr = client_socket.recvfrom(4096);
print(recv.decode());
client_socket.close();```
中间报错就是 数据类型不对,byte和str的数据类型 转换的问题。通过使用以下函数来解决:
python bytes和str两种类型可以通过函数encode()和decode()相互转换,
str→bytes:encode()方法。str通过encode()方法可以转换为bytes。
bytes→str:decode()方法。如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。
目前这是自己想到的解决方案一,若是不行的话,看看是继续坚持遇到问题就继续找原因,还是大方向就错了,应该是写FPGA来。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196035.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...