UDP 클라이언트 예제 - UDP Client example
전체 소스 코드
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 9998
int main(void){
int sock;
struct sockaddr_in target_addr;
char recv_buffer[1024];
int recv_len;
int addr_len;
const char *msg = "hello network!";
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0){
perror("socket ");
return 1;
}
memset(&target_addr, 0x00, sizeof(target_addr));
target_addr.sin_family = AF_INET;
target_addr.sin_addr.s_addr = inet_addr(127.0.0.1);
target_addr.sin_port = htons(PORT);
addr_len = sizeof(target_addr);
sendto(sock, msg, strlen(msg), 0, (struct sockaddr*)&target_addr, addr_len);
if((recv_len = recvfrom(sock, recv_buffer, 1024, 0, (struct sockaddr *)&target_addr, &addr_len)) < 0){
perror("recvfrom ");
return 1;
}
recv_buffer[recv_len] = '\0';
printf("ip : %s\n", inet_ntoa(target_addr.sin_addr));
printf("received data : %s\n", recv_buffer);
close(sock);
return 0;
}
UDP 클라이언트 프로그램은 서버 프로그램과 비슷하지만, 소켓에 주소 정보를 할당하는 bind() 함수를 사용하지 않기 때문에 UDP 서버 프로그램보다 간단하다.
UDP 클라이언트 프로그램 순서도
1. 소켓을 초기화한다(socket) 2. 서버로 데이터 전송(sendto) 3. 서버로부터 데이터 수신(recvfrom) 4. 소켓 연결 종료(close) |
클라이언트에서 먼저 서버로 데이터를 전송하기 때문에 sendto 함수를 먼저 사용. 서버는 클라이언트에서 전송한 데이터를 수신하고 다시 클라이언트로 데이터를 전송하므로 recvfrom 함수를 사용하여 서버로부터의 응답 데이터를 수신한다.
UDP 서버 프로그램은 자기 자신의 주소 정보를 소켓에 할당하고 클라이언트로부터 수신되는 데이터와 함께 클라이언트의 주소 정보를 저정하기 위하여 두 개의 구조체 변수 sockaddr_in을 사용한다. addr과 client_addr
하지만, UDP 클라이언트 예제 프로그램은 자기 자신의 주소 정보를 소켓에 할당하여 사용할 필요 없이 서버의 접속 주소 정보만 필요하기 때문에 하나의 구조체 변수 sockaddr_in을 필요로 한다.
memset(&target_addr, 0x00, sizeof(target_addr));
target_addr.sin_family = AF_INET;
target_addr.sin_addr.s_addr = inet_addr(127.0.0.1);
target_addr.sin_port = htons(PORT);
이 부분은 접속하고자 하는 대상 서버의 정보를 저장하고 있는데 이렇게 하나의 구조체 변수에 접속하고자 하는 서버의 접속 정보를 저장한 뒤에 sendto 함수와 recvfrom 함수에 함께 사용하였다.
UDP 클라이언트 프로그램을 실행하게 되면 문자열을 UDP 프로토콜을 사용하여 서버로 전송하고 서버에서는 수신된 메시지를 다시 클라이언트로 전송하게 된다.
UDP 서버 & 클라이언트 프로그램 (윈도우) 는 TCP 서버 & 클라이언트를 참고하여 주세요
http://nroses-taek.tistory.com/87
헤더 파일 및 에러차리 구문만 따라하면 됩니다. 간단하죠? 따로 올리지 않겠습니다. 궁금한건 댓글로
'[ ★ ]Study > Network' 카테고리의 다른 글
pcap_findalldevs 함수 (0) | 2017.06.13 |
---|---|
RAW 소켓 (0) | 2017.06.12 |
UDP 서버 예제 프로그램 (0) | 2017.06.12 |
UDP 프로토콜 (0) | 2017.06.12 |
윈도우 소켓 에러처리 (FormatMessage) (0) | 2017.06.11 |
댓글