[VPP] vpp_com使用

简介: [VPP] vpp_com使用

vppcom_server.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <vcl/vppcom.h>
// vppcom
// ./vppcom_server 192.168.0.29 8888
int main(int argc, char *argv[]) {
  int rv = 0;
  printf("vppcom server: %d\n", argc);
  if (argc < 3) return -1;
  struct sockaddr_in servaddr;
  memset(&servaddr, 0, sizeof(struct sockaddr_in ));
  servaddr.sin_family = AF_INET;
  //servaddr.sin_addr
  inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  servaddr.sin_port = atoi(argv[2]);
  rv = vppcom_app_create("vppcom_server\n");
  if (rv) {
    printf("vppcom_app_create\n");
    return -1;
  }
  int listenfd = vppcom_session_create(VPPCOM_PROTO_TCP, 0);
  if (listenfd < 0) {
    return -1;
  }
  printf("vppcom_session_create: %s, %s\n", argv[1], argv[2]);
  vppcom_endpt_t endpt;
  memset(&endpt, 0, sizeof(endpt));
  endpt.is_ip4 = 1;
  endpt.ip = (uint8_t*)&servaddr.sin_addr; 
  endpt.port = htons(servaddr.sin_port); //
  rv = vppcom_session_bind(listenfd, &endpt);
  if (rv < 0) {
    printf("vppcom_session_bind failed\n");
    return -1;
  }
  rv = vppcom_session_listen(listenfd, 10);
  if (rv < 0) {
    printf("vppcom_session_listen failed\n");
    return -1;
  }
  vppcom_endpt_t clientpt;
  int clientfd = vppcom_session_accept(listenfd, &clientpt, 0);
  if (clientfd < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  char buffer[1024];
  memset(buffer, 0,sizeof(buffer));
  rv = vppcom_session_read(clientfd, buffer, sizeof(buffer));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  printf("Received from client length: %d , %s\n", rv, buffer);
  rv = vppcom_session_write(clientfd, buffer, rv);
  vppcom_session_close(clientfd);
  vppcom_app_destroy();
  return 0;
}

vppcom_client.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <vcl/vppcom.h>
// vppcom
// ./vppcom_client 192.168.0.29 8888
int main(int argc, char *argv[]) {
  int rv = 0;
  printf("vppcom server: %d\n", argc);
  if (argc < 3) return -1;
  struct sockaddr_in servaddr;
  memset(&servaddr, 0, sizeof(struct sockaddr_in ));
  servaddr.sin_family = AF_INET;
  //servaddr.sin_addr
  inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
  servaddr.sin_port = atoi(argv[2]);
  rv = vppcom_app_create("vppcom_server\n");
  if (rv) {
    printf("vppcom_app_create\n");
    return -1;
  }
  int connfd = vppcom_session_create(VPPCOM_PROTO_TCP, 0);
  if (connfd < 0) {
    return -1;
  }
  printf("vppcom_session_create: %s, %s\n", argv[1], argv[2]);
  vppcom_endpt_t endpt;
  memset(&endpt, 0, sizeof(endpt));
  endpt.is_ip4 = 1;
  endpt.ip = (uint8_t*)&servaddr.sin_addr; 
  endpt.port = htons(servaddr.sin_port); //
  rv = vppcom_session_connect(connfd, &endpt);
  if (rv < 0) {
    printf("vppcom_session_bind failed\n");
    return -1;
  }
  char *str = "vppcomclient\n";
  rv = vppcom_session_write(connfd, str, strlen(str));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  char buffer[1024] = {0};
  rv = vppcom_session_read(connfd, buffer, sizeof(buffer));
  if (rv < 0) {
    printf("vppcom_session_accept failed\n");
    return -1;
  }
  printf("Received from client length: %d , %s\n", rv, buffer);
  vppcom_session_close(connfd);
  vppcom_app_destroy();
  return 0;
}


相关文章
|
6月前
|
算法 C++ 索引
GNURadio+USRP+OFDM实现文件传输(一)
GNURadio+USRP+OFDM实现文件传输(一)
680 0
|
6月前
|
5G 网络架构 索引
安装一个开源虚拟路由器VPP-20.09
安装一个开源虚拟路由器VPP-20.09
|
存储 缓存 测试技术
ZYNQ-AXI Interconnect IP介绍
ZYNQ-AXI Interconnect IP介绍
1542 0
ZYNQ-AXI Interconnect IP介绍
|
6月前
|
编译器 网络性能优化 C语言
VPP DPDK,不是翻墙!!
VPP DPDK,不是翻墙!!
|
6月前
|
算法
GNURadio+USRP+OFDM实现文件传输(二)
GNURadio+USRP+OFDM实现文件传输(二)
376 0
|
6月前
GNURadio+USRP+OFDM实现文件传输(三)
GNURadio+USRP+OFDM实现文件传输(三)
262 0
|
6月前
|
Ubuntu Linux 网络性能优化
VPP安装
VPP安装
314 0
|
6月前
【vpp2206 测试】
【vpp2206 测试】
|
6月前
|
网络协议 网络性能优化
VPP二层接口,不是翻墙
VPP二层接口,不是翻墙
|
缓存 Linux 网络性能优化
安装部署VPP,不是翻墙!!
安装部署VPP,不是翻墙!!
安装部署VPP,不是翻墙!!