大家好,又见面了,我是你们的朋友全栈君。
使用Python进行UDP编程
- 1 SFP光口
- 2 解决方案一(有待验证,看是否成功)
实际遇到需要解决问题真是最好的老师,断更了两天,主要还是自己贪玩了,没有把握好时间,另外就是我一直在研究怎么入手通过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来。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196035.html原文链接:https://javaforall.cn