>Привет 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
|