2012-03-01 2 views
0

Я создаю клиентское/серверное мультимедийное приложение для личного использования. Приложение работает, но у меня есть два сокета на одно соединение: одно для команд сервера и клиента и связь (просто отправляя строки JSON взад и вперед, а другой для отправки сериализованного носителя.Как реализовать многоцелевой протокол сокетов?

Как слить два сокета в мода, что я знаю, какие данные, что, или лучше просто оставить их, как они

ответ

2

Вы должны определить структуру ваших сообщений, чтобы использовать один разъем для обоих? Например:.

Message format: 
    Command,DataLen,Data 

Example messages: 
    JSON,20,{ "text": "Hello!" } 

    CMD1:9:Some Data 

Это текстовый формат с использованием запятой, чтобы отделить эту команду от длины данных, из данных. двоичный формат (который, вероятно, проще разобрать и надежнее), например:

CommandLen(4-bytes):Command:DataLen(4-bytes):Data 
+0

@EvanTeran, brettw Как эта поддержка в двоичном формате потокового видео? Насколько я знаю, нет способа поместить исходный двоичный код в строку JSON. Очевидно, что я могу отправить сообщение JSON, в котором говорится: «Эй, клиент ожидает двоичные данные xxx», но это не касается синхронизации сообщений и двоичных данных. – AedonEtLIRA

+1

Если бы я отправил двоичные данные по закодированным в JSON, я бы, вероятно, просто использовал кодировку base64. это просто и имеет относительно небольшую инфляцию размера данных. –

+0

@EvanTeran Спасибо за совет. Я сделал простой массив Arrays.toString (byte []) и вернулся к тестированию и сравнил его с Base64. Ты победил. Еще раз спасибо, я не знал о эпичности Bas64. – AedonEtLIRA

Смежные вопросы