Skip to content

Instantly share code, notes, and snippets.

@surinoel
Last active July 21, 2019 08:34
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define UDP_PORT 5100
int main(int argc, char **argv)
{
int sockfd, n;
socklen_t clisize;
struct sockaddr_in servaddr, cliaddr;
char sendline[256];
char recvline[256];
if(argc != 2) {
printf("usage : %s <IP address>\n", argv[0]);
return -1;
}
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1) {
perror("socket error\n");
return -1;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(argv[1]);
servaddr.sin_port = htons(UDP_PORT);
// 키보드 입력을 기다리게 된다
while(fgets(sendline, 256, stdin) != NULL) {
// q로 시작하는 단어를 입력한다면 종료된다
if(!strncmp(sendline, "q", 1)) break;
sendto(sockfd, sendline, strlen(sendline), 0,
(struct sockaddr *)&servaddr, sizeof(servaddr));
clisize = sizeof(cliaddr);
// recvfrom
n = recvfrom(sockfd, recvline, 256, 0,
(struct sockaddr *)&cliaddr, &clisize);
recvline[n] = '\0';
fputs(recvline, stdout);
}
close(sockfd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define UDP_PORT 5100
int main(int argc, char **argv)
{
int sockfd, n, ret;
struct sockaddr_in servaddr, cliaddr;
socklen_t len;
char msg[256];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1) {
perror("socket error\n");
return -1;
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
/* 서버 프로그램에서 주로 사용되는 상수로, 운영체제가 IP 주소를 자동적으로 할당해준다. 즉 포트 번호만 일치한다면 수신할 수 있게 된다 */
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(UDP_PORT);
ret = bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(ret == -1) {
perror("bind error\n");
return -1;
}
/* UDP에서는 bind까지 완료하면 끝 */
do {
len = sizeof(cliaddr);
n = recvfrom(sockfd, msg, 1000, 0,
(struct sockaddr *)&cliaddr, &len);
sendto(sockfd, msg, n, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
msg[n] = '\0';
printf("Received data : %s", msg);
} while(strlen(msg));
close(sockfd);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment