singlepost

Как распознать тип информации посылаемой сокетом? << На главную или назад  

TServerSocket в моей проге может посылать клиенту либо текст (методом – SendText), либо файл (методом – SendStream).

А как на стороне клиента определить что ему послано: текст либо файл? Ведь от этого зависит метод приема данных (ReceiveText либо ReceiveBuf).

57 ответов в теме “Как распознать тип информации посылаемой сокетом?”

  1. 12
    Александр Васюченко ответил:

    #11 Неплохая идея… вот только не хочу плодить множество открытых сокетов…

  2. 11
    Лксндр Сргвч ответил:

    ты почитал бы как работают ети ReceiveText и ReceiveBuf
    последовательно лови и то и то.. соответственно в разных тридах..юзай winsock32 ;)

  3. 10
    Ildar Kamaletdinov ответил:

    откройте два соединения (на разных портах), по одному посылайте файлы по другому текст=)

  4. 9
    Александр Васюченко ответил:

    признак в протокол вставить не проблема… в моём существующем протоколе эта возможность уже есть…

  5. 8
    Нгамдкхе Кверос ответил:

    имхо но проще забить на эти классы и просто писать на сокетах, ты хоть знать будешь чем приём текста отличается от приёма файла.

    скорей всего приём текста принимает буфер строго до нулевого байта(возможно с ограничением на размер буфера но я почти уверен что если встретит нулевой символ в потоке превёт и не считает что дальше идти будет), а файла как-то по другому(наверно как обычных ресив).
    но на сокетах там же всего надо только создать забиндить перевести влистен и асептить а с получаемых сокетов дальше спокойненько работать…

  6. 7
    Нгамдкхе Кверос ответил:

    аа.. ну если переписывать… боюсь что тебе по любому придётся признак в поток писать чего идти будет текст или файл пусть и кодированый текстом… ты посмотри может проще весь протокол переписать сразу по людски.

  7. 6
    Александр Васюченко ответил:

    да, я понимаю, что лучше передовать двоичные данные, чем строку… но дело в том, что у меня большой проект уже написан с помощью текстового протокола и переделывать всё заново ой как не хочется. Поэтому мне не составит большого труда кодировать двоичный файл в текст. Кстати, да – это похоже на Base64, которая применяется в E-mail, т.ч. это не идеотизм, а вынужденное решение.

  8. 5
    Владимир Нннннн ответил:

    попахивает Base64 ) Но зачем это все? Проще замутить свой формат данных и передавать что-то вроде структуры:
    wordmagic; // твой-не твой пакет.уникальная сигнатура
    wordtype; // тип данных
    dworddata_len; // длина последующих данных
    а дальше идут данные длиной в data_len

    на клиенте уже разбирать структуру и пользоваться данными в зависимости от их типа.

  9. 4
    Владимир Муромский ответил:

    Смысл двоичный файл кодировать в текстовую строку? Попахивает идиотизмом)

  10. 3
    Алексей Гридин ответил:

    Прилепи свой заголовок, в нём будешь указывать формат следующих данных.

  11. 2
    Александр Васюченко ответил:

    ага… т.к. у меня текстовый протокол передачи данных, то видимо нужно двоичный файл кодировать в текстовую строку… это решение!

  12. 1
    Владимир Муромский ответил:

    Файл тоже может содержать текст, а текст – двоичные данные, поэтому они по сути ничем не отличаются. Посылай первым байтом информацию о том, что ты посылаешь

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.