Вопрос по Socket'ам
Модератор: Модераторы разделов
-
Valmount
- Сообщения: 2
- ОС: ASPLinux
Вопрос по Socket'ам
Здравствуй, уважаемый All. у меня subj. Пишу простой сервер на Си, задаю адрес через константу INADDR_ANY. И он мне благополучно выдаёт адрес в локальной сети, а мне нада внешний, то есть в инете. На компе две сетевухи, инет через впн.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Вопрос по Socket'ам
как-то подозрительно все это...
давай код. и расскажи, каким образом ты установил, что
давай код. и расскажи, каким образом ты установил, что
он мне благополучно выдаёт адрес в локальной сети
слава роботам!
-
Valmount
- Сообщения: 2
- ОС: ASPLinux
Re: Вопрос по Socket'ам
Код: Выделить всё
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <strings.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
int sock, bin, list, acep, rec;
socklen_t size;
char msg[20];
struct sockaddr_in addr;
//bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(3000);
size = sizeof(addr);
sock = socket(AF_INET,SOCK_STREAM,0);
if (sock != -1) printf("socket postroen... \n");
bin = bind(sock, (struct sockaddr*)&addr, sizeof(addr));
list = listen(sock, 5);
for(;;)
{
acep = accept(sock,(struct sockaddr*)&addr, &size);
if (acep>0)
{
do
{
bzero(msg, sizeof(msg));
rec = recv(acep, msg, 20, 0);
if (rec > 0)
{
if (strncmp("echo", msg, 4) == 0)
send(acep, msg, sizeof(msg), 0);
printf("noJIy4eHo: %s\n", msg);
}
else
printf("client otklyu4ilsya. jdem novogo...\n");
}
while ((rec != 0) && strncmp("bye", msg, 3) != 0);
close(acep);
}
}
close(sock);
return(0);
}задаю адрес константой INADDR_ANY:
addr.sin_addr.s_addr = htonl(INADDR_ANY);
В итоге принимает соединение тока на одной сетевухе.
сорьки). намудил с файерволлом).
тег code придуман не просто так.
-
elide
- Бывший модератор
- Сообщения: 2421
- Статус: Übermensch
- ОС: лялих
Re: Вопрос по Socket'ам
забавно. интересно, а какого ты ожидаешь эффекта от применения htonl на INADDR_ANY ? (:addr.sin_addr.s_addr = htonl(INADDR_ANY);
слава роботам!
-
d_n_k
- Сообщения: 636
- ОС: Gentoo GNU/Linux
Re: Вопрос по Socket'ам
забавно. интересно, а какого ты ожидаешь эффекта от применения htonl на INADDR_ANY ? (:
ничего страшного не произайдет, тк INADDR_ANY ~ 0
все сказанное есть имхо...