Socket 프로그래밍 질문이 있습니다..
글쓴이: Long_run / 작성시간: 화, 2012/05/22 - 11:26오전
저는 일단 C 공부를 시작한지 한달여 정도 된 초보 프로그래머 이고..
UDP Socket 통신을 공부하는 중입니다..
아래는 Server와 Client로 Udp Socket 통신을 하는 프로그램 중 Server의 Source 입니다.
1. Client는 Server로 Data를 전송합니다.
2. Server는 Data가 날아온 Client의 IP Adress와 Port를 표시합니다.
3. 마지막으로 Data를 표시합니다.
==============================SOURCE===================================
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/types.h> #include<sys/socket.h> #define MAXLINE 511 int main(int argc, char *argv[]) { struct sockaddr_in servaddr, cliaddr; int s; int nbyte; int addrlen = sizeof(struct sockaddr); char buf[MAXLINE+1]; if(argc != 2) { printf("Usage : %s port_number \n", argv[0]); exit(0); } if((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket fail"); exit(0); } bzero((char *)&servaddr, addrlen); bzero((char *)&cliaddr, addrlen); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(atoi(argv[1])); if(bind(s, (struct sockaddr *)&servaddr, addrlen) < 0) { perror("bind Error"); exit(0); } while(1) { puts("SERVER : WAITING REQUEST .... "); nbyte = recvfrom(s, buf, MAXLINE, 0, (struct sockaddr*)&cliaddr, &addrlen); if(nbyte < 0) { perror("recvfrom fail"); exit(1); } buf[nbyte] = 0; <b>printf("%d:%d\n", cliaddr.sin_addr.s_addr, cliaddr.sin_port);</b> printf("%d byte recv : %s \n", nbyte, buf); if(sendto(s, buf, nbyte, 0, (struct sockaddr*)&cliaddr, addrlen) < 0) { perror("sendto fail"); exit(1); } puts("sendto complete!"); } }
=========================================================================
동작을 시켜보면 숫자들이 나오는데요. 들어있는 값이 IP adress와 Port 값 같기는 한데...
Client의 IP adress 와 port를 표시하는 방법을
OOO.OOO.OOO.OOO:XXXX 형식으로 나타낼 수 있는 방법이 있나요? ㅠ ㅠ
Forums:
inet 관련 함수를 찾아보세요..구글링 조금만 해도
inet 관련 함수를 찾아보세요..구글링 조금만 해도 나오는데.....
댓글 달기