| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Переслать структуру |
| Автор: MaXL 28.1.2008, 15:41 | ||||||
| Всем привет. Есть структура:
Её нужно переслать использую средства WinSock, ну и потом ессно получить, пользуясь теме же средствами. Пытался делать так:
Функция send возвращает _не_ INVALID_SOCKET. Т.е. данные ушли, но потом я пытаюсь читать так:
Ну и там приходят всякая муть. Почитал форум, вроде бы как из слов понял, что так делать нельзя. Был совет пересылать частично, так вот частично это как ? кто может посоветовать алгоритм ? Просто у меня программа может быть либо сервером либо клиентом, и код для них(именно код обработки входящих пакетов) один. И ещё, пишу используя не блокирующий режим сокетом, т.е. сообщения посылаются моему приложению, а он уже обрабатывает. Кто что посоветует ? |
| Автор: MaXL 23.2.2008, 03:23 |
| Вопрос всё ещё актуален. |
| Автор: SneG0K 23.2.2008, 06:09 | ||
И так далее... береш элемент из структуры и отсылаеш его... Береш следующий и отсылаеш следующий и так далее... |
| Автор: MetalFan 23.2.2008, 14:31 |
| SneG0K, а нафиг так? ошибка явно не в этом. Добавлено через 2 минуты и 21 секунду автор, чтобы нормально ответили, выложи тестовое приложение... а то у тебя все на словах, а кода нет. |
| Автор: vovksextra 23.2.2008, 15:35 |
| Должно все работать не видно в каком режиме сокет работает. нужен полный код . |
| Автор: MaXL 23.2.2008, 16:44 | ||||||||||
| Всё, что касается сервера. Вот функция, которая запускает сервер:
Вот процедура, которая выполняется, когда окно приходит сообщение WM_NETWORK:
Вот код процедуры DispatchPacket:
Теперь всё, что касается по поводу клиента. Подключение к серверу:
А вот код, с помощью которого я посылаю:
Ну вот так..=) |
| Автор: MaXL 24.2.2008, 04:46 |
| MetalFan, да, правильно последний массив 246, потом ещё пять вордов, и получается 256, а в шестнадцатиричной 0x100(или $100). Вроде бы именно эти куски кода за всё и отвечают, ну да ладно вот выкладываю полностью этот проджект, пока там всё криво, но это только пока, но надеюсь, что разобраться будет не сложно. |
| Автор: MetalFan 24.2.2008, 11:31 |
| MaXL, а, сорь, не заметил знак бакса %) гляну на досуге проект) |
| Автор: dumb 24.2.2008, 13:49 |
| особо не всматривался, но налицо самая распространенная ошибка - "пакетный tcp". tcp - поточный протокол. для простоты, представь, что recv вычитывает данные порциями от 1 до 3 байт(и неважно, что send послал сразу всю структуру). будет твоя программа работать? |
| Автор: MetalFan 24.2.2008, 14:01 | ||
| ага, ну так ясно... ты в момент получения события FD_READ пытаешься читать данные из сокета сервера... замени
и все, сообщения приходят норм Добавлено через 42 секунды ах да, lSz ввел для контроля за размером принятых данных |
| Автор: MaXL 24.2.2008, 15:02 |
| dumb, спасибо. MetalFan, спасибо. +1 |