Клиент серверный диалог

327
23 января 2017, 17:16

Вопрос по TcpClient. Например, один TcpClient отправляет какое то сообщение другому. Тот в это время ждет данные при помощи theClient.GetStream().Read(...). То есть когда данные приходят, он их считывает. Ну размер сообщения может отличаться от размера буфера, поэтому можно положить это в цикл и накопить байтики для последующей десериализации.

Теперь вопрос. Клиент и сервер осуществляют диалог (запорс/ответ) асинхронно. Может ли получиться так, что theClient на одной стороне при помощи цикла и theClient.GetStream().Read(...) примет в один массив байт байты от разных сообщений?

UPD: Прочитал свой вопрос и понял, что могут возникнуть непонятки. :)

Поясню на примере.

С одной стороны асинхронно уходит 2 сообщения:

  • "первое сообщение"
  • "вторая строка"

На принимающей стороне срабатывает theClient.GetStream().Read(...) (и повторяется пока приходят данные). Не засунет ли такая конструкция две этих строки в одно сообщение?

UPD2:

Если я правильно понимаю, TCP пакет выглядит как то так

| HEADERS | BODY | END |

Так вот я в этой абстракции могу управлять только блоком BODY. Но этот блок может быть больше, чем размер пакета. То есть если я отправлю асинхронно 2 сообщения:

| HEADERS | ПЕРВОЕ СООБЩЕНИЕ | END |

| HEADERS | ВТОРОЕ СООБЩЕНИЕ | END |

То на принимающей стороне это может выглядеть так

| HEADERS | ПЕРВОЕ | END |

| HEADERS | ВТОРОЕ | END |

| HEADERS | СООБЩЕНИЕ | END |

| HEADERS | СООБЩЕНИЕ | END |

И как это разруливать?

UPD3:

То, что данные придут в том порядке в котором они были отправлены, это я понимаю, но откуда мне знать, что в двух асинхронных потоках они отправятся именно так, как нужно? А нужно, чтобы было так:

Не важно в каком порядке отправятся сообщения, важно, что если они будут делиться на части, эти части не будут вокруг частей другого сообщения.

READ ALSO
Не меняется цвет текста в строке DataGridView

Не меняется цвет текста в строке DataGridView

Пытаюсь поменять цвет текст в строке, но при загрузке формы строка моргнет нужным цветом и опять станет цвет по умолчанию

476
Объединение массивов байтов

Объединение массивов байтов

Есть необходимость присоединять один массив байт к другому (много раз подряд)

455
Можно ли в произвольном тексте найти все, что закодировано в Base64?

Можно ли в произвольном тексте найти все, что закодировано в Base64?

Например, имеется произвольный текст, где могут встречаться последовательности, которые закодированы в base64

265
Конвертирование клавиш в ToUnicodeEx

Конвертирование клавиш в ToUnicodeEx

Как конвертировать клавиатурных хук который сможет понимать все клавиши и выводить нужный символ?!

331