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 =