Я хочу отправить строку json поверх сетевого потока. код на стороне клиентаотправлять байт [] данные по сетевому потоку. C#
using (var ns = new NetworkStream(socket))
{
string json = JsonConvert.SerializeObject(listCfile, Formatting.Indented);
byte[] jsonbytes = Encoding.UTF8.GetBytes(json);
byte[] jsonLength = BitConverter.GetBytes(jsonbytes.Length);
ns.Write(jsonLength, 0, jsonLength.Length);
ns.Write(jsonbytes, 0, jsonbytes.Length);
}
jsonbytes был байт [988324]
На стороне сервера
using (var ns = new NetworkStream(socket))
{
byte[] byDataLength = new byte[4];
ns.Read(byDataLength, 0, 4);
int jsonLength = BitConverter.ToInt32(byDataLength, 0);
byte[] byData = new byte[jsonLength];
ns.Read(byData, 0, jsonLength);
File.WriteAllBytes("E:\\json.txt",byData);
}
byData был байт [988324]
Но byData я не получил, так же, как jsonbytes, которые я отправил.
Мне нужны некоторые подсказки.
Обновление! несколько раз это работает. ByData получил то же самое, что и jsonbytes i sent Несколько раз это не работает :(
«потерять некоторые данные» не является полезным описанием проблемы. Пожалуйста, дополните. –
С клиентской стороны отправляется jsonLength перед фактическими данными, чтобы создать буфер на стороне сервера для получения данных json? – nura
@nura Я так же думаю, как и вы, но я начинаю в C# и кодировании, поэтому вы можете дать мне несколько примеров, спасибо большое. – vmphuong