![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос про порты
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]
> это так?
нет, это не так
в контексте соединения с вновь подключившимся клиентом сервер использует тот же номер порта, что и слушающий порт