>>Привет all! >>Разбираю тут код по работе с сокетами на C++ под linux. Встретился >>кусочек: >>addr.sin_port = htons(3425); //С этим все ясно. Порт в открытом виде. >>addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); //Тут не понятно >>connect (sock, (struct sockaddr *) &addr, sizeof(addr)) //Тут тоже... >> >>Так вот, у меня 2 ламерских вопроса по этому небольшому кусочку. >>1) htonl(INADDR_LOOPBACK) я понимаю что INADDR_LOOPBACK это петля 127.0.0.1, но когда я >>попытлася передать какойнить свой IP, например 10.0.0.1, то столкнулся с проблемой... >>Как мне через char * передать в эту htonl свои данные? >>Я понимаю что функция ест uint32_t, но я к сожалению еще >>ни разу не работал с этим типом, а тем более как >>мне из юзерских данных, переданных в мою функцию через "char *USER_IP", >>скормить их htonl'у или лучше сразу сразу конвертировать в понятную циферку >>addr.sin_addr.s_addr'a...???? >>2) Очередной заковырк с указателями для новичка: (struct sockaddr *) &addr. >>Не очень понимаю что сие произведение делает... Если можно, поясни, all... >>Заранее огромное спасибо за помощь!!! > > >Все очень просто. В сети данные не представляются в формате с точкой, >а представляются 32 битным числом например loopback 0x7f000001 а htonl нужен >для того, чтобы перевести порядок следования байт из машинного в сетевой. >так что если хочешь использовать 10.0.0.1 используй число 0x10000001 Спасибо огромное!
|