Задать вопрос
idShura
@idShura

Как передать сообщение между клиентом и сервером?

Пытаюсь передать сообщение между клиентом сервером. Проблема в том, что сообщение передается не полностью.
Пока временно решил проблему установкой задержки при чтении передаваемых данных на сервере (Thread.Sleep).

Подскажите, есть ли более изящный способ гарантированного получения всех передаваемых данных?

stream = client.GetStream();
byte[] data = new byte[655360]

StringBuilder builder = new StringBuilder();
int bytes = 0;

do
{
    bytes = stream.Read(data, 0, data.Length);
    builder.Append(Encoding.UTF8.GetString(data, 0, bytes));
    Thread.Sleep(5);  //Без задержки сообщение принимается не полностью
}
while (stream.DataAvailable);

string message = builder.ToString();
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    SDP-030_PRG Продвинутая разработка в Microsoft .NET
    1 неделя
    Далее
  • Ulearn.me
    Проектирование на языке C#
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
DataAvailable показывает лишь, сколько байт на данный момент пришло. Он не знает полную длину сообщения, сколько всего должно прийти.

Вы сами должны знать длину сообщения, которое хотите получить. И вызывать Read несколько раз до тех пор, пока не придет сообщение целиком.

А DataAvailable тут вообще непричем. Выбросить его надо.

Upd. Сделал пример:
https://github.com/yudakov/CSharpTcpClientServerExample
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы