Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 14:21   #1
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию winskock и РОУТЕР

написал код

Код:
var WSAData:TWSAData;
begin
WSAStartup($101,wsadata);
 
Ser:=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
SAdr.sin_family:=AF_INET;
SAdr.sin_port:=htons(11111);
SAdr.sin_addr.S_addr:=inet_addr('188.134.34.76');//тут указываю внешний адрес(взял с сайта http://2ip.ru/
fillchar(Sadr.sin_zero,sizeof(sadr.sin_zero),0);
bind(ser,sadr,sizeof(sadr));
listen(ser,somaxconn);
по идее порт 11111 должен открываться(если нет,поправьте),но он закрыт(проверяю на том же сайте)
прочитал что порт и адрес,проходя через роутер меняются,может надо указывать в 7 строке ip локальный? и тогда на какой порт меняется тот,который я указал?
помогите пожалуйста
spydark91 вне форума Ответить с цитированием
Старый 01.06.2011, 15:15   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> может надо указывать в 7 строке ip локальный?

да, или 0.0.0.0.0, чтобы слушать на всех интерфейсах

> и тогда на какой порт меняется тот,который я указал?

нинакакой. Изменение порта относится к клиенту (или UDP сокетам), но не серверу.

А чтобы локальный порт был виден извне, на роутере (в настройках файрвола или NAT) нужно привязать этот (или любой другой) порт к порту на вашей машине.

Вот представьте, если у вас в локальной сети 2 машины, и обе слушают на 11111 порту. На роутер приходит запрос на соединиение по этому порту, на какую локальную машину он должен его отослать? На обе? Вот поэтому и надо руками (или через UPnP) сконфигурировать предварительно маппинг внешних портов на локальные.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 01.06.2011, 22:00   #3
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

Цитата:
Вот поэтому и надо руками (или через UPnP) сконфигурировать предварительно маппинг внешних портов на локальные.
можно поподробнее
Цитата:
нинакакой. Изменение порта относится к клиенту (или UDP сокетам), но не серверу.
я хочк сделать чат на основе UPD сокетов,пожтому можно тоже раскрыть тему

Цитата:
А чтобы локальный порт был виден извне, на роутере (в настройках файрвола или NAT) нужно привязать этот (или любой другой) порт к порту на вашей машине.
можно тоже поподробнее плиз
spydark91 вне форума Ответить с цитированием
Старый 01.06.2011, 22:43   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
проверяю на том же сайте
У тебя откровенно сумбурные представления о термине и сущности "сайт".
В конечном счете непонятно какие.
В дан.случае ни о каких "сайтах" речи ВООБЩЕ быть не может - речь идет о ХОСТАХ.
Хост - далеко не сайт.

Цитата:
2 машины, и обе слушают на 11111 порту. На роутер приходит запрос на соединиение по этому порту, на какую локальную машину он должен его отослать? На обе?
С какой это радости "на обе"?
Роутер транслирует пакет именно туда куда ему приказал админ.
А если никуда не приказал, то роутер его выкинет к едреней фене.
mss вне форума Ответить с цитированием
Старый 02.06.2011, 02:15   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> С какой это радости "на обе"?

да это я в шутку написал, чтобы была ясна абсурдность ситуации.

> можно поподробнее

смотрите мануал по роутеру, там для домохозяек всё расписано

> я хочк сделать чат на основе UPD сокетов

почему именно UPD? там же возни с пропавшими сообщениями будет вагон.
Или это будет голосовой чат?

В принципе, если есть выделенный сервер, особых проблем с чатом быть не должно. Хоть через TCP, хоть через UDP.

Если такого сервера нет (планируется чистый P2P), геморрой с портами там недецкий будет в общем случае. Вот тут примерно можно оценить фронт работ.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 02.06.2011, 15:11   #6
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

upd,потому что он быстрее
а сервер я планирую сделать в виде одного из пользователей,чтобы через него все шло
spydark91 вне форума Ответить с цитированием
Старый 02.06.2011, 15:22   #7
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

Код:
SAdr.sin_port:=htons(11111);
тут я открытл порт 11111,но проверяя его тут http://2ip.ru/ ,говорит ,что порт закрыт
прозодя через роутер,порт меняется?если да то на какой и как это определить? если нет,то можно объяснить в чем тут ошибка
spydark91 вне форума Ответить с цитированием
Старый 02.06.2011, 17:10   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> порт меняется?

серверный порт меняется (или остаётся тот же) в зависимости от того, что настроили в роутере (вы).

порт клиентского запроса чаще всего меняется, т.к. клиентов много, а портов мало.

> можно объяснить в чем тут ошибка

ну всё, пошли на второй круг.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 02.06.2011, 18:24   #9
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

извините,забыл выложить код
результат аналогичен
Код:
WSAStartup($101,wsadata);

Ser:=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
SAdr.sin_family:=AF_INET;
SAdr.sin_port:=htons(11111);
SAdr.sin_addr.S_addr:=inet_addr('192.168.0.101');//указываю локальный ip
fillchar(Sadr.sin_zero,sizeof(sadr.sin_zero),0);
bind(ser,sadr,sizeof(sadr));
listen(ser,somaxconn);
l:=sizeof(sadr);
k:=accept(ser,@sadr,@l);
а порт открывается только при подключении к нему клиента?(или для каждого клиента дополнительно еще порт создается?а тот который был указан 11111 остается слушать дальше?и он должен открываться по моему коду?)
spydark91 вне форума Ответить с цитированием
Старый 02.06.2011, 18:25   #10
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

и чтобы заработал этот код,нужно настроить роутер(открыть порт №11111?)
spydark91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
роутер Bustle Компьютерное железо 4 29.12.2010 20:51
Продвинутый роутер OCTAGRAM Компьютерное железо 4 26.08.2010 11:00
Роутер werser Помощь студентам 1 07.03.2010 15:38
Модем роутер Pedro Компьютерное железо 2 06.11.2009 13:35
победить роутер nick2115 Помощь студентам 5 16.11.2008 00:54