linux, petalinux 下的udp 通讯实验

本文介绍了在Zynq 7000上基于Petalinux的UDP通信实验,通过编写C语言服务端和客户端程序进行测试。最初遇到的问题是服务端无法解析客户端地址,经修改后实现成功通讯。实验展示了服务端如何监听并回送数据,客户端如何发送数据并接收响应。
摘要由CSDN通过智能技术生成

udp 是基于tcp/ip协议的无连接通讯。我基于zynq 7000建立了petalinux 系统,希望能有高效有效的通讯方式。以前做了tcp 基于连接的通讯实验,但实际中包会被拆开,感觉有点不好,所以特做了无连接的通讯测试,这就是udp 通讯。

1:实验过程

首先在网上查找了udp 在linux下的c 语言通讯程序。 但我需要运行的环境是zynq 7000上建立的petalinux2018.2 环境。我的环境是在ubuntu16,下安装 petalinux 2018.2实现的。采用交叉编译,petalinux上的udp服务器程序可以运行,可以接收到包,但解析不到地址。这样就不能实现通讯。我也怀疑测试的客户端程序有问题,所以也就写了一个客户端测试程序。

这样还是不行,我就在ubuntu16 下直接cc 这2个程序,发现可以实现通讯。就是在petalinux下运行服务端或客服端就得不到地址。这样在xilinx 论坛上提了此问题,后来终于得到一个提示,修改后就可以各种条件下都可以udp 通讯。

通讯的实验是:客户端程序udpc 发送一个包, 服务端udps得到这个包,显示,并回送一个包,客户端接收到,并显示。这样就验证了通讯。

2:服务端udps.c 的代码

在ubuntu 上运行编译是 :cc udps.c -o udps

在petalinux 上运行,在ubuntu 上运行交叉编译是 :arm-linux-gnueabihf-gcc udps.c -o udps

// Server side implementation of UDP client-server model 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define PORT     8080 
#define MAXLINE 1024 

// Driver code 
int main(int argc,char** argv) {
        int sockfd;
        char buffer[MAXLINE];
        char *hello = "Hello from server";
        struct sockaddr_in servaddr, cliaddr;

        // Creating socket file descriptor 
        if ( (sockfd =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值