![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приём сообщений от сервера [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Andr-04 © (2006-07-31 15:12:00)Добрый день. Как обойтись без использования WSAAsyncSelect для отправления сообщений от сервера и их приёма КЛИЕНТОМ?
Andr-04 (2006-08-07 12:42:00) [1]> процедуры это ты хорошо придумал, еще не забывай про функции
:-D Ну уж это само собой!
Медведъ (2006-08-07 10:11:00) [2]>Andr-04 (05.08.06 22:55) [85]
процедуры это ты хорошо придумал, еще не забывай про функции
Andr-04 (2006-08-05 22:55:00) [3]> Оно и заметно, судя твоим по вопросам
Мои вопросы не затрагивают исходники готовых модулей. Сервер мой, код которого я приводил, работал, пусть немного был и некорректным из-за невнимательности и из-за того, что некоторым вещам я не придавал существенного значения. Да и тему эту бы не создавал, если бы в стрейме, опять по невнимательности, не забыл бы указать начальную позицию. Мда... Невнимательность меня подводит - код большой из-за того, что мало общих процедур, поэтому как что-нибудь изменю в одном месте, приходится вводить коррективы и в остальных частях. Всё, в следующих своих проектах будут сплошные процедуры! :-D
> Стоить ли выпячивать поделки, не имеющие отношения к логике
> транспорта ?
Это я пример привёл к тому, что исходники я тоже ковыряю.
> Да по барабану, прокси или не прокси)
> Транспорт лежит уровнем ниже !
> Читай про модель OSI до полного просветления.
Я же сказал, что перестраховался и исправил! Более того, всегда буду делать подобным образом!
Сергей М. (2006-08-05 19:15:00) [4]
> мне вполне хватило kolTCPSocket.pas
Оно и заметно, судя твоим по вопросам
> его и нету! Я его сделал для собственных нужд
Стоить ли выпячивать поделки, не имеющие отношения к логике транспорта ?
> write - сервер выполняет не функции прокси
Да по барабану, прокси или не прокси)
Транспорт лежит уровнем ниже !
Читай про модель OSI до полного просветления.
Andr-04 (2006-08-04 19:44:00) [5]> Значит следовало честно сказать - я, мол, не могу разобраться
> в исходниках scktcomp.pas)
Я в них не разбирался - мне вполне хватило kolTCPSocket.pas (см. пост 56).
> Понятия не имею, что есть этот самый SockStream.
А его и нету! Я его сделал для собственных нужд.
> Зато вижу, что на предмет грамотной обработки FD_WRITE/CLOSE-
> событий ты не приложил усилий по анализу тех же исходников)
Зато благодаря таким людям как Вы, теперь всё исправил! На счёт close - невнимательность, а write - сервер выполняет не функции прокси, поэтому переполнения там не будет! Но я всё равно перестраховался и поправил. :-)
Сергей М. (2006-08-04 13:55:00) [6]
> Когда могу разобраться в этих исходниках - так и делаю
Значит следовало честносказать - я, мол, не могу разобраться в исходниках scktcomp.pas)
> На основе чего, Вы думаете, я SockStream свой написал?
Понятия не имею, что есть этот самый SockStream.
Зато вижу, что на предмет грамотной обработки FD_WRITE/CLOSE-событий ты не приложил усилий по анализу тех же исходников)
Andr-04 (2006-08-04 13:45:00) [7]И недоработки в KOL.pas исправлял?.. Это я к примеру, но не ограничиваясь.
Andr-04 (2006-08-04 13:44:00) [8]Когда могу разобраться в этих исходниках - так и делаю. На основе чего, Вы думаете, я SockStream свой написал?
Сергей М. (2006-08-04 13:38:00) [9]
> что толку использовать стандартные компоненты?
> вероятность узнать что-то новое, в таком случае, понижается
Да неужели ?)
Ну хорошо, ну не хочешь ты использовать стандартные компоненты (и/или компоненты вообще), но то самое "новое" лежит прямо у тебя перед носом - в исходниках этих компонентов.. Работающих ! Трассируемых ! Дающих практически нахаляву бесценную инф-цию о правильном использовании API !
))
Andr-04 (2006-08-04 13:14:00) [10]Основная цель её написаниея - для себя, чтобы не сидеть на месте! Просто интересно было заглянуть немножечко поглубже в работу приложений, вот и пишу на WinSockAPI и другие API. А что толку использовать стандартные компоненты? Вероятность узнать что-то новое, в таком случае, понижается. Да и KOL только за такой подход! В этом сам убедился, когда в KOL.pas исправлял недоделки, руководствуясь всё тем же VCL. Знания не бывают лишними. Надеюсь, мои старания ещё мне пригодятся! ;-)
Сергей М. (2006-08-04 12:59:00) [11]
> программа для проверки знаний
.. и она, конечно же, ни в коем случае не может использовать готовые компоненты - только на WinsockAPI и только через самоистязание такие программы пишутся)
Andr-04 (2006-08-04 12:49:00) [12]По поводу FD_WRITE меня смущало предложение "Если же программа отправляет данные не очень большими порциями и относительно редко, не переполняя буфер, то второй раз событие FD_Write не возникнет никогда.". Теперь всё понял (как-то подчёркнутую фразу всё пропускал и, в итоге, боялся, что не получу извещения об освобождении буфера). За ночь в голове уже сформировался алгоритм работы (создам новый динамический массив стреймов для исходящего буфера и буду его заполнять и отправлять при поступлении FD_READ и доотправлять при FD_WRITE). По поводу программы - это и не телефонный справочник, если так интересно - это программа для проверки знаний.
Ketmar (2006-08-04 10:03:00) [13]> [73] Andr-04 (04.08.06 02:23)
"я вам вышлю то, не знаю что". хоть бы сказал сначала, что за проект-то. вдруг это телефонный справочник? исходя из "не представляет никакого интереса и масштабного использования", справочник вполне подходит.
Сергей М. (2006-08-04 08:57:00) [14]
> Andr-04 (04.08.06 02:23) [73]
> когда этот FD_WRITE не происходит из документации толком
> не понял
FD_WRITE происходит как минимум однократно:
1. для кл.гнезда - сразу же за FD_CONNECT
2. для серв. гнезда, того что создается ф-цией accept - сразу после успешного его создания
FD_WRITE происходит всякий раз при фактическом освобождении буфера передачи, если предыдущий вызов ф-ции send() вернул отказ с кодом WSAEWOULDBLOCK, фиксирующий факт невозможности записи в буфер передачи данных размером более свободного места в этом буфере на этот момент.
По сути этот внутренний буфер передачи представляет собой очередь (FIFO), в хвост которой помещаются данные, указываемые при вызовах send-функций, и из головы которой по мере готовности транспортного канала выбираются данные для фактической передачи их в канал.
Буфер имеет фиксированный в каждый момент времени размер, который может быть определен вызовом GetSockOpt(SO_SNDBUF) и переопределен вызовом SetSockOpt(SO_SNDBUF). Буфер индивидуален для каждого гнезда и его размер по умолчанию равен 8К (зависит от ряда важных системных параметров).
При получении отказа с кодом WSAEWOULDBLOCK следует прекратить дальнейшие попытки вызовов send-ф-ций вплоть до возникновения события FD_WRITE.
Andr-04 (2006-08-04 02:23:00) [15]Да нет, далеко не прокси!.. Пишу четырехлетний проект, в котором лишь присутствует управление по локальной сети, а сам проект вовсе не предназначен для масштабного взаимодействия с локальной сетью и Интернет. Правда ядро уже обновлено, ему 2,5 года... Сама тема проекта не представляет никакого интереса и масштабного использования, поэтому писать её название я умышленно не буду, однако методы решений, используемые в проекте, могут найти свое применение не мало где ещё. Ну для прокси там, конечно, маловато чего можно найти, а вот для использования файлов чужого компьютера, например, - в самый раз. Перед созданием этой темы форума велась работа по созданию сетевых стреймов для KOL'а... Сейчас, благодаря этому форуму, работа с ними практически закончена (осталось только разобраться с исходящим буфером по рекомендации Сергея М. - пока ещё думаю, стоит ли эта игра свеч, т.к. изменять придется немало, потому что сервер работает в режиме "вопрос-ответ", а тут ответ нужно будет ещё кэшировать, да и когда этот FD_WRITE не происходит из документации толком не понял). Это что касается сетевой части. Помимо этого ещё присутствуют собственная, независимая от стороннего ПО, шифруемая БД и другие мелочи. Вообще, первоначально ставилась другая цель разработки данного проекта, но теперь он превратился в средство воплащения идей и развивается только при наличии свободного времени, а также при возникновении ситуации, которая и вдохновила меня на создание проекта. Если есть желание посмотреть на проект, может и баги поискать - подтвердите это и, при необходимости, оставьте e-mail - и я его вышлю. Правда, вышлю не новую версию (без сетевых стреймамов и прочих запланированных функций - эта версия ещё в стадии разработки) и БЕЗ ИСХОДНИКОВ! Но шифрование БД в ней присутствует (оно появилось с появлением нового ядра программы).
FireMan_Alexey (2006-08-03 23:24:00) [16]Так что ты конкретно пишешь?
Может подскажем как :)
Скажи что должно передаваться и что приниматься?
Если это очередной прокси ...
Andr-04 (2006-08-03 20:05:00) [17]Само по себе слово Гуру не оскорбительное, но здесь оно звучит унизительно. Да я, собственно, никуда и не уходил! Может, всё-таки, прикратим разборки и засирание форума? Или модерам всё по...
Ketmar (2006-08-03 19:26:00) [18]ай. снова гуру пришёл...
Andr-04 (2006-08-03 19:02:00) [19]Почитаю при необходимости. Уж с этим я сам как-нибудь разберусь. А вам всем советую быть по-вежливее!
Andr-04 (2006-08-03 19:02:00) [20]Почитаю при необходимости. Уж с этим я сам как-нибудь разберусь. А вам всем советую быть по-вежливее!