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();
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
DataAvailable показывает лишь, сколько байт на данный момент пришло. Он не знает полную длину сообщения, сколько всего должно прийти.

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

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

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

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

Войти через центр авторизации
Похожие вопросы