TServerSocket в моей проге может посылать клиенту либо текст (методом – SendText), либо файл (методом – SendStream).
А как на стороне клиента определить что ему послано: текст либо файл? Ведь от этого зависит метод приема данных (ReceiveText либо ReceiveBuf).
26 июля 2009 в 22:02
#11 Неплохая идея… вот только не хочу плодить множество открытых сокетов…
26 июля 2009 в 21:01
ты почитал бы как работают ети ReceiveText и ReceiveBuf
последовательно лови и то и то.. соответственно в разных тридах..юзай winsock32
26 июля 2009 в 20:02
откройте два соединения (на разных портах), по одному посылайте файлы по другому текст=)
26 июля 2009 в 16:00
признак в протокол вставить не проблема… в моём существующем протоколе эта возможность уже есть…
26 июля 2009 в 15:05
имхо но проще забить на эти классы и просто писать на сокетах, ты хоть знать будешь чем приём текста отличается от приёма файла.
скорей всего приём текста принимает буфер строго до нулевого байта(возможно с ограничением на размер буфера но я почти уверен что если встретит нулевой символ в потоке превёт и не считает что дальше идти будет), а файла как-то по другому(наверно как обычных ресив).
но на сокетах там же всего надо только создать забиндить перевести влистен и асептить а с получаемых сокетов дальше спокойненько работать…
26 июля 2009 в 15:05
аа.. ну если переписывать… боюсь что тебе по любому придётся признак в поток писать чего идти будет текст или файл пусть и кодированый текстом… ты посмотри может проще весь протокол переписать сразу по людски.
26 июля 2009 в 15:04
да, я понимаю, что лучше передовать двоичные данные, чем строку… но дело в том, что у меня большой проект уже написан с помощью текстового протокола и переделывать всё заново ой как не хочется. Поэтому мне не составит большого труда кодировать двоичный файл в текст. Кстати, да – это похоже на Base64, которая применяется в E-mail, т.ч. это не идеотизм, а вынужденное решение.
26 июля 2009 в 13:03
попахивает Base64 ) Но зачем это все? Проще замутить свой формат данных и передавать что-то вроде структуры:
wordmagic; // твой-не твой пакет.уникальная сигнатура
wordtype; // тип данных
dworddata_len; // длина последующих данных
а дальше идут данные длиной в data_len
на клиенте уже разбирать структуру и пользоваться данными в зависимости от их типа.
26 июля 2009 в 13:00
Смысл двоичный файл кодировать в текстовую строку? Попахивает идиотизмом)
26 июля 2009 в 12:05
Прилепи свой заголовок, в нём будешь указывать формат следующих данных.
26 июля 2009 в 12:04
ага… т.к. у меня текстовый протокол передачи данных, то видимо нужно двоичный файл кодировать в текстовую строку… это решение!
26 июля 2009 в 12:01
Файл тоже может содержать текст, а текст – двоичные данные, поэтому они по сути ничем не отличаются. Посылай первым байтом информацию о том, что ты посылаешь