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

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

Приём сообщений от сервера [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2 3 4 5

Andr-04 ©   (2006-07-31 15:12:00) 

Добрый день. Как обойтись без использования WSAAsyncSelect для отправления сообщений от сервера и их приёма КЛИЕНТОМ?


Andr-04   (2006-08-02 14:09:00) [61]

Значение какой массив - динамический или статический не имеет.
> И еще неделю выяснять будем, что говорит при этом WSAGetLastError()
Не утрируйте! WSAGetLastError выдаёт 0, т.е. всё OK. А использовать готовые компоненты смысла нет - модуль пишу. Для чего - не скажу, потому что унижать будете! Вобщем, это не имеетзначения!


Сергей М.   (2006-08-02 13:48:00) [62]


> если Send вызывать с buf[0], то она тоже вернёт (-1)


Угу .. И еще неделю выяснять будем, что говорит при этом WSAGetLastError()

И накой тут сдался дин.массив - одному тебе известно.


Сергей М.   (2006-08-02 13:46:00) [63]

Тебе вообще накой ляд Winsock потребовался ?
Чем готовые компоненты не устроили ?


Andr-04   (2006-08-02 13:43:00) [64]

И с buf, и с buf[0], и с простой переменной типа Cardinal. Ещё пробовал использовать ioctlsocket(fSocket,FIONREAD,sz), после выполнения которой sz возвращает 0. Но Send работает без проблем! И ещё: если Send вызывать с buf[0], то она тоже вернёт (-1)!


Ketmar   (2006-08-02 13:31:00) [65]

> [21] Andr-04   (02.08.06 13:17)

тогда с чего делается send() с просто buf? и советую проверить, не используется ли buf ещё где-то таким же образом. просто buf даст указатель совсем не туда, куда buf[0].


Сергей М.   (2006-08-02 13:28:00) [66]


> не понимаю почему она возникает


А нефиг манипулировать GetSockOpt(), если не понимаешь, что там происходит и почему.


Andr-04   (2006-08-02 13:17:00) [67]

Да знаю я описание этой ошибки. Только не понимаю почему она возникает! Переменная ига описана как динамический массив (array of byte), размер которого устанавливется предварительно при помощи SetLength, где в качестве размера выступает fBufSize.


Сергей М.   (2006-08-02 12:50:00) [68]

WSAEFAULT (10014) The buf argument is not totally contained in a valid part of the user address space.


Andr-04   (2006-08-02 12:38:00) [69]

Да, в блокирующем и работал. Но не было необходимости принимать сообщения от сервера!
А я тем временем упорно разбирал документацию и переводил часть кода на асинхронный режим. Короче, в приведённом мной коде в [5] WSAGetLastError выдаёт WSAEFAULT (10014).
Прошу извинить за всё написанное мной выше - постараюсь больше этого не делать: буду писать сюда только после достаточного чтения доки и не экономить время на этом! Ато отвечают тут быстро :-) Спасибо!


Ketmar   (2006-08-01 18:54:00) [70]

кстати, только что обратил внимание на дезинформацию в [5]: "я с сокетами всегда только в блокирующем режиме работал". после чего желание как-то помогать пропало вовсе -- не люблю лжецов.


Ketmar   (2006-08-01 18:50:00) [71]

>Andr-04   (01.08.06 15:55) [15]
ничего ты не понял. "понял" -- это не "и всё", а "потому что".

>Сергей М. ©   (01.08.06 16:53) [16]
тут, похоже, просто ждут, пока весь нужный текст из справки на русский переведут. вот ты в [13] начал, после чего в [15] честно признались. %-)


Сергей М.   (2006-08-01 16:53:00) [72]


> Может ещё за одно что узнаю


Да, ты узнаешь что тебе не место в программинге, ибо ты либо туп, либо лентяй, либо и то и другое.

Ибо ты никак не прореагировал на WSAGetLastError.


Andr-04   (2006-08-01 15:55:00) [73]

Я понял, что Listen не нужен и всё. А остальное всё оставил. Пока решил зрение напрягать. Может ещё за одно что узнаю, чем читать на английском описание каждой функции/процедуры.


Ketmar   (2006-08-01 15:53:00) [74]

а можно пояснить глубокий эзотерический смысл вызова getsockopt()? или это опять из серии "а я в справке новую функцию нарыл"?

далее. очень интересно, что такое buf, какого оно размера, и почему в одном месте просто buf, а в другом -- buf[0]?

ну и: что, таки, возвращает WSAGetLastError(), как справедливо поинтересовался Сергей М.?


Сергей М.   (2006-08-01 15:03:00) [75]


> Andr-04   (01.08.06 14:52) [12]


Ну хорошо.
Предположим, огр.кучу док-ции в эл.виде действительно читать тяжело.

Но прочитать десяток-другой строк из справки к recv() вполне можно было !

Ведь там черным по белому написано (цитата из справки к recv):

Return Values

If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError

Т.е. если ты получил -1, первоечто ты должен сделать - вызвать WSAGetLastError, получить код конкретнойошибки, проанализировать его и в зависимости от причин ветвить свой алгоритм.
Ты это сделал ?
Нет, не сделал.
Ну так а что же ты хочешь тогда ?!


Andr-04   (2006-08-01 14:52:00) [76]

Читаю, читаю... Говорил же уже! Правда, глаза сильно устают - принтер старый сломался, а шестерёнок нигде нету. А на счёт Listen - я её убирал - при отладке заметил, что ответ от неё -1, но это проблему не решило.


Ketmar   (2006-08-01 09:59:00) [77]

>DiamondShark ©   (01.08.06 00:21) [7]
Дим, это технология "а вот сколько всяких функция й знаю". %-)

>Andr-04   (01.08.06 00:50) [8]
что характерно (ц), нужные ответы есть в справке, идущей вместе с Delphi. надо только не лениться читать и думать.


Сергей М.   (2006-08-01 08:15:00) [78]


> Andr-04


В целм код ужасный.
Почитай book.itep.ru, разделы "Winsock" и "Протокол TCP", там есть красочная циклограмма, наглядно иллюстрирующая, какие ф-ции и в какой последовательности вызываются на стороне сервера и на стороне клиента и что при этом происходит в недрах протокола.


Сергей М.   (2006-08-01 08:11:00) [79]


> Andr-04   (01.08.06 00:50) [8]


listen() никогдане используется на стороне клиента, это ф-ция сервера.


Andr-04   (2006-08-01 00:50:00) [80]

Не ругайте сильно! Если бы я знал что писать, то не спрашивал бы. Я никогда не сталкивался с необходимостью принимать сообщения от сервера. И что в этом такого страшного? Всё бывает когда-то первый раз! Если вас раздражают подобные вопросы - не пишите ответы. Со своей стороны я тоже пытаюсь найти ответ - ищу справочную литературу. Так оказалось, что сначала ничего найти не удавалось, поэтому, ради экономии времени, и задал вопрос здесь. Но ответа найти пока не удалось.


Страницы:   1 2 3 4 5

Наверх

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