![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приём сообщений от сервера [D6, Win95/98, WinME, NT4, Win2k, WinXP]
Andr-04 © (2006-07-31 15:12:00)Добрый день. Как обойтись без использования WSAAsyncSelect для отправления сообщений от сервера и их приёма КЛИЕНТОМ?
Сергей М. (2006-08-03 11:50:00) [41]
> почему при подключении, передаче данных и отключении клиента
> сначала срабатывает FD_ACCEPT, потом FD_CLOSE и лишь после
> этого FD_READ?
Быть того не может)
Показывай код сервера ..
Andr-04 (2006-08-03 11:42:00) [42]Динамические массивы не было необходимости никуда передавать! Я их до этого случая использовал для хранения переменных данных, всего навсего. Например, для хранения указателей (PControl) на динамические компоненты и т.п. (Конечно, в KOL все они динамические - я имею в виду те, которые я создавал сам в процессе работы программы, а не те, которые пишет MCK при компиляции).
Да, Вы правы. Я всё записывал ещё и в стрим. Провернул всё в голове и послал пока этот динамический куда подальше! При приёме буфера записываю сначала всё в статический массив, а потом в стрим.
Поскольку обсуждение ещё не закрыли, позволю задать ещё вопрос: почему при подключении, передаче данных и отключении клиента сначала срабатывает FD_ACCEPT, потом FD_CLOSE и лишь после этого FD_READ? Как поменять FD_CLOSE местами с FD_READ? Это же физически невозможно передавать буфер с закрытым сокетом! В блокирующий режим переводить - не помогает. Ато это приводит к уничтожению Stream'а (у меня - при вызове FD_CLOSE). Если через отладку всё делать, то всё происходит как положено.
Сергей М. (2006-08-03 11:22:00) [43]
> Andr-04 (03.08.06 11:13) [42]
> не было необходимости, вот и не знал
А тут вдруг появилась, надо понимать ?
Подозреваю, что ты пытаешься приспособить для аккумуляции принимаемых данных. А разумней для этой цели было бы использовать стрим, а не массив.
Ketmar (2006-08-03 11:18:00) [44]> [42] Andr-04 (03.08.06 11:13)
> годик с лишним
бросайте Вы, благородный дон, это программирование. коли за "годик с лишним" не смогли разобраться с динамическими массивами, то не попробовать ли Вам занятие попроще?
Andr-04 (2006-08-03 11:16:00) [45]Что-то обсуждений моей личности здесь слишком много. А ведь для этого, вроде, есть специальное место (вроде - это потому, что я там никогда не был).
Andr-04 (2006-08-03 11:13:00) [46]Да и динимаическими массивами только годик с лишнима занимаюсь... Ну не было необходимости, вот и не знал! Шесть лет для программирования может показаться большим сроком, если шесть лет исследовать каждую его область. Я же этим занимаюсь не на протяжении всего периода, да и нет так усердно, честно говоря. Изучаю только то, что требуется в данный момент.
Andr-04 (2006-08-03 11:06:00) [47]Не гоню! Правда, первый год это был Паскаль, потом чистый VCL, BDE и вся стандартная ерунда. А последние 2,5 года пишу исключительно в KOL, что часто приводит к рассмотрению и WinAPI. Вот и хорошо. Это с сокетами я тольо так лопухнулся! Если так хотите посмотреть на мой проек - пишите мыло, а если не верите - ну и не надо! Мне от этого ни горячо, ни холодно.
А WSAAsyncSelect, как оказалось, здесь действительно не причём.
Сергей М. (2006-08-02 15:41:00) [48]
> medved_68 © (02.08.06 15:12) [38]
> ты точно гонишь
"Эт точно" (с) Сухов
Ketmar (2006-08-02 15:36:00) [49]> [33] Andr-04 (02.08.06 14:59)
я тебе на это уже давно намекал. %-)
medved_68 (2006-08-02 15:12:00) [50]
> Ещё только 6 лет программирую - мало ещё! :-)
> нужно указывать buf[0]!
Шесть лет!!!! Ну вот сейчас ты точно гонишь.
Сергей М. (2006-08-02 15:08:00) [51]Ну тады, возвращаясь к нашим баранам, какое отношение все это имеет к WSAAsyncSelect ?
Andr-04 (2006-08-02 15:07:00) [52]
> Еще бы ты разобрался с Get/SetSockOpt - цены б тебе не было.
Да, уже и с этим успел познакомиться, но лишь всколзь. Если будут опять проблемы - впервую очередь это почитаю! Мне очень помогла статья из королевства
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1021&mode=printНу и её вторая часть...
Andr-04 (2006-08-02 15:01:00) [53]
> Проотладчик ты, разумеется, слыхом не слыхивал.
> Значит тебе пора закругляться с потугами на поприще программинга.
Какраз-таки отладчик мне это и сказал! А программировать заканчивать я и не думаю! Ещё только 6 лет программирую - мало ещё! :-)
Сергей М. (2006-08-02 15:00:00) [54]Малацца.
Еще бы ты разобрался с Get/SetSockOpt - цены б тебе не было.
Andr-04 (2006-08-02 14:59:00) [55]А, всё, разобрался! Форум уже в чат превратился по моей милости! Опять неправильно с динамическим массивом работал. ВЕЗДЕнужно указывать buf[0]! Да будет это мне уроком! Очень извиняюсь за отнятое время! Спасибо всем!
Сергей М. (2006-08-02 14:52:00) [56]Проотладчик ты, разумеется, слыхом не слыхивал.
Значит тебе пора закругляться с потугами на поприще программинга.
Andr-04 (2006-08-02 14:44:00) [57]У меня теперь другая проблема - после вызова send программа аварийно завершается, хотя сервер это сообщение благополучно получает!..
Сергей М. (2006-08-02 14:30:00) [58]
> в сервере указывал на передачу пустого буфера из Stream,
> из-за того, что забыл назначить нулевую позицию именно
> в Stream'е! И читаю конец, спокойный такой
Ты гонишь.
recv() в этом случае никак не может вернуть SOCKET_ERROR.
Сергей М. (2006-08-02 14:28:00) [59]
> Andr-04 (02.08.06 14:09) [27]
> Значение какой массив - динамический или статический не
> имеет
Может и не имеет. А вот выбор размера массива имеет.
> WSAGetLastError выдаёт 0
Этого не может быть. потому что этого не может быть никогда (с)
Справка к send() гласит:
Return Values
If no error occurs, send returns the total number of bytes sent. (Note that this can be less than the number indicated by len.) Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
Ты когда-нибудь научишься ее читать, ту самую справку ?
> использовать готовые компоненты смысла нет - модуль пишу
С каких пор использование готовых компонентов потеряло смысл ?
И при чем здесь модуль ?
> Для чего - не скажу
Сексот ты наш)
> это не имеетзначения
Имеет ! Еще как имеет !
Трассируя пошагово чужой (заведомо работоспособный) модуль ты приобретаешь необходимые знания.
Andr-04 (2006-08-02 14:21:00) [60]Ну я и мудило! Столько и времени, и места на форуме угробыл! Мда... Короче, тему можно закрыть, а лучше и удалить, потому что от неё больше никакого толка никому не будет! Я в сервере указывал на передачу пустого буфера из Stream, из-за того, что забыл назначить нулевую позицию именно в Stream'е! И читаю конец, спокойный такой! Не внимательно получилось!