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 관련 함수를 찾아보세요..구글링 조금만 해도 나오는데.....
댓글 달기