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光口的连接问题。

  1. 买交换机

这个是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来。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值