2016-05-16 4 views
0

То, что я пытаюсь выполнить, состоит в том, чтобы клиент отправил строку плюс структуру данных через сокет и получил сервер, чтобы прочитать его и обработать.C# отправка смешанных данных через сокет

Например: клиент посылает строку «Сохранить», за которым следует JSON, сервер должен разобрать первую строку, а затем решили действовать соответствующим образом (в этом случае он должен десериализации JSON и сохранить его где-нибудь)

то, что я думал: сервер может разделить входные данные на куски 8 байт

byte[] buffernew = new byte[8]; 

Прочитайте первый кусок, который содержит только строку и затем deseria lize любой объект передается в следующих кусках байтов. (Должен ли я рассмотреть также окончательный 8-байтовый кусок, чтобы сказать, что связь завершена? например классическая строка?)

Является ли это жизнеспособным решением? Есть ли способ лучше?

Может ли кто-нибудь предоставить эскиз решения на стороне сервера?

+0

приемном конце соединения необходимо знать конец каждого элемента (ов) данных. Таким образом, вы можете использовать одно или несколько из следующих условий: 1) Ascii: завершение с знанием символа 2) Ascii или Binary: добавление байта в начало элемента (ов) данных 3) Ascii или двоичный: элемент (ы) фиксированной длины. Вы не можете отправлять строки, которые являются классом в C#, поэтому вы преобразовываете строку в байт [] и заканчиваете на «\ 0». Структура может быть фиксированной или переменной. Структура фиксированного размера может быть легко отправлена. Структура переменных размеров каждый элемент данных должен быть завершен одним из трех методов выше. – jdweng

+0

Добавление количества байтов кажется хорошим, но тогда как вы получаете счет и используете его для разделения информации в потоке ввода байтов? – SOROMEED

+0

Если количество байтов является суммой строки + структуры, и вы завершаете строку с '\ 0', тогда вы можете получить длину строки. Структура представляет собой общую длину - длину строки. Каждому элементу нужен конкретный метод определения начальной позиции и конечной позиции, которые могут быть получены из предыдущих данных. Все всегда равно сумме кусков. – jdweng

ответ

0

Если его мой код C#, говорящий с моим кодом C#, я использую BinaryWriter и BinaryReader. Они будут хорошо разбираться в сборе основных типов данных на провод и прочь. Так что

var bw = new BinaryWriter(stream, false); 
bw.Write("save"); 
bw.Write(json); 

на другом конце

var br = new BinaryReader(stream , false); 
var cmd = br.ReadString(); 
var json = br.ReadString(); 

Он будет иметь дело с отрывов для вас

+0

Благодарим вас за вклад, но клиент может быть на любом другом языке (при условии, что он может сериализовать JSON или другую структуру данных) – SOROMEED