[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;
}


相关文章
|
存储 前端开发 Linux
DPDK-mempool(1)
DPDK-mempool(1)
273 0
|
缓存 安全 网络安全
SD-WAN与VPN讲解
SD-WAN与VPN之间的差异及相似之处
2189 0
|
网络性能优化 网络协议 网络虚拟化
|
编译器 网络性能优化 C语言
VPP DPDK,不是翻墙!!
VPP DPDK,不是翻墙!!
|
10月前
|
监控 数据可视化 搜索推荐
现代教育管理中的看板应用:任务可视化的强大力量
化解教学压力,赋予课堂活力,试试看板工具
222 7
现代教育管理中的看板应用:任务可视化的强大力量
|
存储 算法 数据可视化
Python 金融编程第二版(GPT 重译)(一)(1)
Python 金融编程第二版(GPT 重译)(一)
213 1
|
人工智能 自然语言处理 搜索推荐
如何利用AI技术改善学生的学习体验?
【5月更文挑战第19天】如何利用AI技术改善学生的学习体验?
496 1
|
存储 测试技术 网络安全
冲破内核限制:使用DPDK提高网络应用程序的性能(下)
冲破内核限制:使用DPDK提高网络应用程序的性能
|
网络协议 测试技术 API
20个基于DPDL开源项目,带你冲破内核瓶颈(下)
20个基于DPDL开源项目,带你冲破内核瓶颈(下)
|
存储 编译器 程序员
C语言基础——C语言常见概念
C语言基础——C语言常见概念

热门文章

最新文章