Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вопрос про порты


Kurtevich ©   (2004-07-29 10:54:00) 

говорят, когда сервер слушает запросы на коннект по порту ХХХ, то после коннекта он работает с клиентом уже через другой порт... это так? и нужно ли такое делать самостоятельно, чтобы не заколбасить порт большим количеством подключений? подскажите плизз, если кто на самом деле знает... :)


Kurtevich   (2004-07-30 13:46:00) [1]


> Digitman ©   (30.07.04 12:30) [14]


я написал, что никогда не юзал TSocket совсем не для того, чтобы оскорбить тебя, Digiman. А пример на самом деле убил меня этим самым
> var
>  TyubeteikCapacity: Integer = 1;

потому что это на самом деле круто :) вот и всё.


Digitman   (2004-07-30 12:30:00) [2]


> Kurtevich   (30.07.04 12:23) [13]


ну и глупо
к тому же можно было сообразить тем что находится под тубетейк, что пример дан НЕ для реального "юзанья", а для детального исследования, ЧТО и КАК происходит при достижения ситуации "по самый тубетейк"


Kurtevich   (2004-07-30 12:23:00) [3]


> ShowMessage('По самый тубетейк = ' + IntToStr(TyubiteikCapacity));


:D  ....круто! :)))

никогда не юзал дельфийские соккетные компоненты и не собираюсь


Digitman   (2004-07-30 10:18:00) [4]


> спасибо, но если бы я хотел дождаться этого момента, я бы
> не задавал такие вопросы, а делал бы всё методом "авось
> прокатит"...


можешь сам поэкспериментировать в "ловле момента" и грубо оценить примерные размеры "тубетэйк"

для этого нужно :

- взять компонент ClientSocket,
- установить у него св-ва Host = 'localhost' и Port = номер_заведомо_неактивного_порта_на_лок_машине,
- установить обработчик OnError след.образом :

var
 TyubeteikCapacity: Integer = 1;
...
 Inc(TyubiteikCapacity);
 ErrorCode = 0;
 try
   ClientSocket.Open;
 except
   ShowMessage('По самый тубетейк = ' + IntToStr(TyubiteikCapacity));
 end

- выполнить метод ClientSocket.Open


panov   (2004-07-30 09:43:00) [5]

type
THandle = LongWord;


Kurtevich   (2004-07-29 18:53:00) [6]

... или typedef void* HANDLE???
да, старость не радость... :)


Kurtevich   (2004-07-29 18:51:00) [7]

то есть я конечно-же хотел сказать

typedef HANDLE *void

:) бывает...


Kurtevich   (2004-07-29 18:49:00) [8]

кажется даже когда-то я видел где-то в каких-то виндовзких хэдэрах что-то типа

#define HANDLE *void

но это так, к слову... :)


Kurtevich   (2004-07-29 18:45:00) [9]

не знаю что такое THandle, но подозреваю что так же как и SOCKET это на самом деле указатель размера unsigned int...

а сколько же максимум их может быть и чем это ограничено?


> система сама разберется и даст тебе знать, когда будет "по
> самый тубэтейк"


спасибо, но если бы я хотел дождаться этого момента, я бы не задавал такие вопросы, а делал бы всё методом "авось прокатит"... :)


Rouse_   (2004-07-29 15:45:00) [10]

> если у меня их будет 2^10 или больше?
Не будет у тебя столько, просто не хватит ситемных ресурсов. Немного абстрагируясь можно сказать что TSocket являится аналогом THandle которого всегда конечное количество...
Но это так к слову :)


Digitman   (2004-07-29 13:52:00) [11]


> Kurtevich   (29.07.04 13:04) [3]


..но тубэтейк лучше не снимай.. система сама разберется и даст тебе знать, когда будет "по самый тубэтейк" .. вот тогда и будешь мозговать, как можно (и возможно ли вообще) умерить свои аппетиты в отношении ресурсов своего процесса, чтобы в этот самый тубэтейк полезло побольше


Verg   (2004-07-29 13:18:00) [12]

У соединенных сокетов всегда два адреса локальныйIP:локальныйПОРТ + дальнийIP:дальнийПОРТ

Соответственно, accept воозвращает сокет у которого -
локальныйIP:порт прослушки+IPклиента:портКлиента

Ничего тут не поменять, да и незачем.

Порт - это не овощная яма, шоб его забивать.
Забить по самую тубетэйк могут твой нсщасный процесс(программу-сервер), а не порт. Сколько для этого понадобится клиентов зависит от многих факторов. Прежде всего от того как твоя программа-сервер будет обслуживать каждого из этих клиентов, ну в конце-концов можно и тюбетейку снять :))


Kurtevich   (2004-07-29 13:04:00) [13]

вот-вот... вот это оно... дык я ж к тому: порт соккета, возвращенного акцептом тот же самый, что и у слушающего? и нужно ли / можно ли его поменять? сколько нада клиентов, шоб забить этот несщасный порт под самую тюбетейку? если у меня их будет 2^10 или больше? %-(


Rouse_   (2004-07-29 11:45:00) [14]

Просто создается еще один экземпляр сокета функцией accept который и общается с клиентом а первоначальный сокет продолжает слушать порт на наличие новых подключений...


Digitman   (2004-07-29 11:22:00) [15]


> это так?


нет, это не так
в контексте соединения с вновь подключившимся клиентом сервер использует тот же номер порта, что и слушающий порт


Наверх

Титульная страница Поиск, карта сайта Написать письмо