말그대로, UDP 통신에서 접속하는 클라이언트이 IP와 PORT 번호를 알고자 합니다. 여기서, TCP에서와 같이 gethostbyaddr을 사용하면 되는지요.. 간단한 예제가 있으면 알려주세요..
struct sockaddr_in adr; .......... if(FD_ISSET(bk, &read_fd)) { if((r = recvfrom(bk, dgram, sizeof(dgram), 0, (struct sockaddr *)&adr, &x)) < 0) { err("recvfrom() failed. %s(%d)\n", strerror(errno), errno); } header = (msg_head *)dgram; switch(header->type) { case REQ_CLI_LOGIN : { lgn_req = (login_req*)dgram; // get IP address hp = gethostbyaddr((char*)&(adr.sin_addr.s_addr), sizeof(adr.sin_addr.s_addr), AF_INET); if(!hp) { err("error\n"); } else { dbg("success IP[%s]\n", inet_ntoa(adr.sin_addr)); } lgn_res->ack = 0x01; if(( s = sendto(bk, dtfmt, sizeof(dtfmt), 0, (struct sockaddr *)&adr, x)) < 0) { err("sendto() failed. %s(%d)\n", strerror(errno), errno); } } break; default : dbg("unkwon type 0x%x\n", header->type); } } }
이렇게 하면 같은 호스트에서 서버, 클라이언트를 돌리면 되는데, 다른 호스트에서 서버, 클라이언트 돌리면 안됩니다..
실력이 있으면 삶이 편하다... 영차 영차...
printf("ip:%s\n", inet_ntoa(adr.sin_addr);
집에나 갈까?
IP 와 Port 넘버를 알아보는데 gethostbyaddr 을 쓸 필요는 없습니다. gethostbyaddr 은 IP 어드레스를 가지고 해당 IP 의 호스트 네임을 Reverse-lookup 하는 함수죠. (즉, DNS 를 이용합니다.)
recvfrom() 의 4번째 아규먼트인 struct sockaddr * 에 접속한 클라이언트의 IP 와 Port 넘버가 들어가 있습니다. 물론 network byte order 로 들어있죠.
IP 는 먼저 답변하신 분 말씀대로 inet_ntoa(adr.sin_addr) 로 얻으시면 됩니다. (실제 코드상에도 이 함수가 보이는군요) Port 는 ntohs(adr.sin_port) 로 얻을수 있죠.
저가 정신이 없죠..
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
답변 부탁드립니다...
이렇게 하면 같은 호스트에서 서버, 클라이언트를 돌리면 되는데,
다른 호스트에서 서버, 클라이언트 돌리면 안됩니다..
실력이 있으면 삶이 편하다... 영차 영차...
[code:1]printf("ip:%s\n&q
이렇게 하면 될거 같은데...
집에나 갈까?
Re:
IP 와 Port 넘버를 알아보는데 gethostbyaddr 을 쓸 필요는 없습니다.
gethostbyaddr 은 IP 어드레스를 가지고 해당 IP 의 호스트 네임을
Reverse-lookup 하는 함수죠.
(즉, DNS 를 이용합니다.)
recvfrom() 의 4번째 아규먼트인 struct sockaddr * 에 접속한 클라이언트의
IP 와 Port 넘버가 들어가 있습니다. 물론 network byte order 로 들어있죠.
IP 는 먼저 답변하신 분 말씀대로 inet_ntoa(adr.sin_addr) 로 얻으시면 됩니다.
(실제 코드상에도 이 함수가 보이는군요)
Port 는 ntohs(adr.sin_port) 로 얻을수 있죠.
저가 정신이 없죠..
저가 정신이 없죠..
실력이 있으면 삶이 편하다... 영차 영차...
댓글 달기