Все,Deserializing несколько объектов из асинхронного сокета
Я немного новичок в программировании на C# и сокетах, и мне нужен совет. Я смотрел этот сайт и похожие сайты, но на самом деле не нашел решения для своей проблемы.
Я разрабатываю клиентское приложение и серверное приложение, и они взаимодействуют через асинхронный сокет. Клиент отправляет объекты на сервер по очереди, путем сериализации его в MemoryStream с использованием BinaryFormatter. Получаемый массив байтов отправляется через сокет и десериализуется сервером.
Это хорошо работает, когда сервер успевает получить и обработать объект до того, как клиент отправит новый. Однако, когда клиент отправляет объекты быстрее, чем сервер может их обрабатывать, они останавливаются на стороне сервера. Следующий вызов EndReceive() считывает все объекты в очереди из сокета, но сериализатор только десериализует первый объект, а другие потеряны.
Объекты имеют переменный размер, поэтому, я думаю, я не могу использовать свойство Position для MemoryStream. Есть ли способ обнаружить в массиве байтов, где начинаются объекты?
Кроме того, я прочитал в других сообщениях, что EndReceive() может не получать все, что было отправлено в одном чтении, могут потребоваться другие чтения. Так что, я думаю, это еще кое-что, с чем мне придется иметь дело?
Любые указатели? Любая помощь будет принята с благодарностью. :-)
Спасибо за ответ. Моя основная проблема заключается в десериализации нескольких объектов. Когда сервер получает массив байтов, содержащий 2 объекта, как десериализовать второй? Думаю, мне придется использовать свойство Position класса MemoryStream, но я не знаю размер объектов. Есть ли способ узнать размер объектов из содержимого массива байтов? – user1397096