UDP - Gakgu/Gakgu.github.io GitHub Wiki

개요

UDP(User Datagram Protocal)

절차

  • 수신측(server)

    • 수신 소켓 생성
    • 수신 소켓 주소 생성
    • 수신 소켓에 수신 소켓 주소를 bind()
    • 수신
    • 종료
  • 송신측(Client)

    • 송신 소켓 생성
    • 송신 소켓 주소 생성
    • 송신
    • 종료

예제

수신측(Server)

#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define BUFFER_SIZE 512

int main()
{
  // 서버 소켓 생성
  int sock = socket(PF_INET, SOCK_DGRAM, 0);

  // 서버 소켓 주소를 생성
  struct sockaddr_in server_addr;
  memset(&server_addr, 0, sizeof(server_addr));
  server_addr.sin_family = PF_INET;
  server_addr.sin_port = htons(1234);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // or inet_addr("127.0.0.1");

  // 서버 소켓 주소를 소켓에 bind()
  bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));

  // 수신
  while(1)
  {
    char buf[BUFFER_SIZE];
    struct sockaddr_in client_addr;
    socklen_t client_addr_size = sizeof(client_addr);

    recvfrom(sock, buf, BUFFER_SIZE, 0, (struct sockaddr*)&client_addr, &client_addr_size);
    printf("%s", buf);
  }

  // 종료
  close(sock);
  return 0;
}

송신측(Client)

#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define BUFFER_SIZE 512

int main()
{
  // 서버 소켓 생성
  int sock = socket(PF_INET, SOCK_DGRAM, 0);

  // 서버 소켓 주소를 생성
  struct sockaddr_in server_addr;
  memset(&server_addr, 0, sizeof(server_addr));
  server_addr.sin_family = PF_INET;
  server_addr.sin_port = htons(1234);
  server_addr.sin_addr.s_addr = htonl(INADDR_ANY); // or inet_addr("127.0.0.1");

  // 송신
  while(1)
  {
    char buf[BUFFER_SIZE] = "asdf";
    sendto(sock, buf, BUFFER_SIZE, 0, (struct sockaddr*)&server_addr, sizeof(server_addr));
  }

  // 종료
  close(sock);
  return 0;
}
⚠️ **GitHub.com Fallback** ⚠️