1. 程式人生 > 程式設計 >Linux UDP服務端和客戶端程式的實現

Linux UDP服務端和客戶端程式的實現

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,(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,stdin);
    sendto(server_sock_fd,strlen(recv_buf),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,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,stdin);
    sendto(sock_fd,(struct sockaddr *)(&server_addr),len);
    
    /* 接收UDP客戶端的資料 */
    len = sizeof(server_addr);
    nbytes = recvfrom(sock_fd,(struct sockaddr *)&server_addr,&len);
    recv_buf[nbytes] = '\0';
    printf("recv %d bytes:%s.\n",recv_buf);
  
  }

  return 0;
}

2. 在本機執行結果

編譯:

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

執行:

Linux UDP服務端和客戶端程式的實現

Linux UDP服務端和客戶端程式的實現

3. 在開發板與PC之間執行結果

編譯:

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

Linux UDP服務端和客戶端程式的實現

Linux UDP服務端和客戶端程式的實現

到此這篇關於Linux UDP服務端和客戶端程式的實現的文章就介紹到這了,更多相關Linux UDP服務端和客戶端內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!