소켓 프로 그래 밍 기본 데이터 구조 struct sockaddrin, struct sockaddr,struct in_addr
struct sockaddr_in, struct sockaddr,struct in_addr, 이것 은 네트워크 프로 그래 밍 에서 자주 사용 하 는 구조 체 입 니 다. 매번 에 각자 의 구성원 이 무엇 인지 기억 하지 못 하고 임시 검 사 를 해 야 합 니 다. 나중에 볼 수 있 도록 여기 서 정리 하 겠 습 니 다.
struct sockaddr {unsigned short sa_family; /* 주소 족, AF xxx * / char sa data [14]; /* 14 바이트 의 프로 토 콜 주소 * /};
위 는 일반적인 socket 주소 입 니 다. 인터넷 socket 까지 구체 적 으로 아래 구조 로 유형 변환 struct sockaddrin {short int sin family; / * 주소 족 * / unsigned short int sin port; / * 포트 번호 * / struct in addr sin addr; / * 인터넷 주소 * / unsigned char sin zero [8]; / * struct sockaddr 와 같은 길이 * /};
struct in_addr 는 32 비트 IP 주소 입 니 다.struct in_addr {unsigned long s_addr;};
struct in 도 있어 요.addr {union {struct { u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;struct { u_short s_w1,s_w2;} S_un_w;u_long S_addr;} S_un;};이용 ulong htonl(u_long hostlong);호스트 바이트 순 서 를 TCP / IP 네트워크 바이트 순 으로 변환 합 니 다. u 이용short htons(u_short hostshort);호스트 바이트 순 서 를 TCP / IP 네트워크 바이트 순서 로 변환 합 니 다.
inet_addr () 는 점 분할 IP 주소 (예 를 들 어 192.168.0.1) 를 상기 구조 에 필요 한 32 비트 IP 주소 (0xC0A 80001) 로 변환 합 니 다.
일반적인 용법 은 int sockfd 입 니 다.struct sockaddr_in my_addr;sockfd = socket(AF_INET, SOCK_STREAM, 0); /* 오류 검 사 를 좀 하 세 요! * /
my_addr.sin_family = AF_INET; /* 호스트 바이트 순서 * / myaddr.sin_port = htons(MYPORT); /* short, 네트워크 바이트 순서 * / myaddr.sin_addr.s_addr = inet_addr(“192.168.0.1″);
bzero (& (my addr. sin zero), 8); / * zero the rest of the struct * / * bind () 에 대한 오류 검사 잊 지 마 세 요: * / bind (sockfd, (struct sockaddr *) & my addr, sizeof (struct sockaddr);
2. inet addr, inet aton, inet ntoa
inet_addr: 네트워크 주 소 를 네트워크 바 이 너 리 숫자 로 바 꾸 고 돌아 오 는 IP 주 소 는 네트워크 순서 입 니 다. 함수 원형: unsigned long in inet addr (const char * cp)
inet aton: 네트워크 주 소 를 네트워크 바 이 너 리 숫자 로 바 꿉 니 다. inet addr 와 의 차 이 는 결 과 는 반환 값 이 아니 라 인삼 inp 가 가리 키 는 in addr 구조 체 를 저장 하 는 것 입 니 다. 함수 원형: int inet aton (cont char * cp, struct in addr * inp)
inet ntoa: 네트워크 바 이 너 리 숫자 를 네트워크 주소 로 바 꿉 니 다. 함수 원형 은 char * inet ntoa (struct in addr in) 입 니 다.
3. 두 개의 업 데 이 트 된 함수 inet pton 과 inet ntop 가 있 습 니 다. 이 두 가지 함 수 는 ipv 4 와 ipv 6 를 처리 할 수 있 습 니 다. 원형 은 다음 과 같 습 니 다.
int inet_pton(int af, const char *src, void *dst);
, af , dst
inet_pton inet_addr , :
AF_INET:src , ASCII (ddd.ddd.ddd.ddd ), in_addr , *dst
AF_INET6:rc IPV6 ,, in6_addr , *dst
, errno EAFNOSUPPORT, af src , 0。
inet_ntop
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
ASCII , , socklen_t cnt, dst , , , , errno ENOSPC
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.