Linux UDP服务端和客户端程序的实现

所属分类: 软件编程 / C 语言 阅读数: 61
收藏 0 赞 0 分享

1. 源码

UDP服务端:

/**
 * @brief  UDP服务端
 * @author Mculover666
 * @date  2020/04/15
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{

  int server_sock_fd;
  struct sockaddr_in server_addr, client_addr;
  char recv_buf[100];
  int nbytes = 0;
  socklen_t len = 0;

  /* 创建Server Socket */
  server_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  if (server_sock_fd < 0)
  {
    printf("服务端Socket创建失败");
    return -1;
  }
  printf("服务端Socket创建成功\n");

  /* 绑定ip和端口 */
  bzero(&server_addr, sizeof(server_addr));
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  server_addr.sin_port = htons(atoi(argv[1]));//指定端口号
  bind(server_sock_fd, (struct sockaddr *) &server_addr, sizeof(server_addr));

  printf("服务端Socket绑定成功\n");
  
  while(1)
  {
    /* 接收UDP客户端的数据 */
    printf("等待接收客户端数据:\n");
    len = sizeof(client_addr);
    nbytes = recvfrom(server_sock_fd, recv_buf, 100, 0, (struct sockaddr *)&client_addr, &len);
    printf("ok\n");
    recv_buf[nbytes] = '\0';
    printf("recv %d bytes:%s.\n", nbytes, recv_buf);

    //接收用户输入,发送给客户端
    printf("请输入要发送给客户端的数据:");
    fgets(recv_buf, 100, stdin);
    sendto(server_sock_fd,recv_buf,strlen(recv_buf),0,(struct sockaddr *)&client_addr,len);
  }

  return 0;
}

UDP客户端:

/**
 * @brief  UDP客户端程序
 * @author Mculover666
 * @date  2020/04/15
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
  int sock_fd;
  struct sockaddr_in server_addr;
  char recv_buf[100];
  int nbytes = 0;
  socklen_t len = 0;

  /* 创建Socket */
  sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  if (sock_fd < 0)
  {
    printf("客户端Socket创建失败");
    return -1;
  }

  /* 绑定ip和端口 */
  bzero(&server_addr, sizeof(server_addr));
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = inet_addr(argv[1]);
  server_addr.sin_port = htons(atoi(argv[2]));//指定端口号
  while(1)
  {
	  len = sizeof(server_addr);
    //接收用户输入,发送给服务端
    printf("请输入要发送给服务端的数据:");
	  fgets(recv_buf, 100, stdin);
    sendto(sock_fd,recv_buf,100,0,(struct sockaddr *)(&server_addr),len);
    
    /* 接收UDP客户端的数据 */
    len = sizeof(server_addr);
    nbytes = recvfrom(sock_fd, recv_buf, 100, 0, (struct sockaddr *)&server_addr, &len);
    recv_buf[nbytes] = '\0';
    printf("recv %d bytes:%s.\n", nbytes, recv_buf);
  
  }

  return 0;
}

2. 在本机运行结果

编译:

gcc server.c -o srever_wangshiwei.o
gcc client.c -o client_wangshiwei.o

运行:


3. 在开发板与PC之间运行结果

编译:

gcc server.c -o srever_wangshiwei.o
arm-linux-gnueabi-gcc client.c -o clientARM_wangshiwei.o


到此这篇关于Linux UDP服务端和客户端程序的实现的文章就介绍到这了,更多相关Linux UDP服务端和客户端内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

更多精彩内容其他人还在看

C语言数组入门之数组的声明与二维数组的模拟

这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中变量与其内存地址对应的入门知识简单讲解

这篇文章主要介绍了C语言中变量与其内存地址对应的入门知识简单讲解,同时这也是掌握指针部分知识的基础,需要的朋友可以参考下
收藏 0 赞 0 分享

讲解C语言编程中指针赋值的入门实例

这篇文章主要介绍了讲解C语言编程中指针赋值的入门实例,通过const int i与int *const pi这样两个例子来分析指针的赋值和地址指向,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中的结构体的入门学习教程

这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程入门之程序头文件的简要解析

这篇文章主要介绍了C语言编程入门之程序头文件的简要解析,包括头文件重复包含问题等方面的说明,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言编程中的联合体union入门学习教程

这篇文章主要介绍了C语言编程中的联合体union入门学习教程,也是C语言入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言中数组作为函数的参数以及返回值的使用简单入门

这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的内存表的基础学习教程

这篇文章主要介绍了MySQL的内存表的基础学习教程,包括内存表的创建以及使用限制等等,需要的朋友可以参考下
收藏 0 赞 0 分享

C++中头文件的概念与基本编写方法

这篇文章主要介绍了C++中头文件的概念与基本编写方法,是C++入门学习中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

jQuery移动页面开发中主题按钮的设计示例

这篇文章主要介绍了jQuery移动页面开发中主题按钮的设计示例,jQuery是当今最具人气的JavaScript开发类库,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多