Last active
July 21, 2019 08:34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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