Я новичок в программировании сокетов. Я разрабатываю клиентское приложение сервера.
И я использую Asynchronous tcp ip socket. Но теперь я столкнулся с проблемой. В моей клиентской части я получаю свои данные с помощью массива байтов размером 2 кбайта методом beginReceive. Его работа отлично, если размер данных ниже или равен 2 kb, но проблема возникает при размере данных, превышающем диапазон 2kb.
Пожалуйста, дайте мне некоторое решение.C# асинхронный метод beginend
ответ
Это совершенно нормально - вы не должны ожидать получить все данные за один звонок, независимо от того, используете ли вы синхронные или асинхронные вызовы и есть ли у вас много данных или немного.
Вы должны продолжать чтение до тех пор, пока не будет прочитано, что нет данных - или пока у вас не будет всего, что вам нужно. Если вашему протоколу требуется более одного запроса/ответа на соединение, вы должны либо префикс длины, либо сообщение, чтобы другая сторона знала, сколько нужно читать, или иметь какой-то разделитель для указания конца сообщения. Префикс длины намного проще, когда он подходит, но он не просто поддерживает потоковое вещание - вы должны в конечном итоге иметь префиксы с длинными префиксами и последний фрагмент, чтобы указать, когда вы закончите.
Я согласен с ответом Джона, утверждая, что вы не должны ожидать, что все ваши данные будут прочитаны.
Вот некоторые блоги, которые помогли мне с этой проблемой в прошлом: Aviad Ezra имеет отличную серию на Асинхронные сокеты:
- .NET Sockets - Two Way - Single Client
- .NET Sockets in Two Directions with Multiple Client Support
- Sending Typed (Serialized) Messages over .NET Sockets
Этот блог особенно полезен, если вы решите использовать маршрут с префиксом длины, используемый автором S в MemoryStream в качестве его временного хранения между чтениями:
- 1. C# - Разрешение Метод Прервать Асинхронный
- 2. C# Асинхронный метод Обратный вызов
- 3. C# асинхронный метод - нужна помощь
- 4. Асинхронный метод вызова в C#
- 5. Асинхронный метод, возвращающий bool
- 6. Как создать асинхронный метод
- 7. Как создать асинхронный метод в C#?
- 8. Запустите любой асинхронный метод C#. Возможное?
- 9. C# асинхронный метод и возврат жду
- 10. Асинхронный C# Метод не возвращает строку
- 11. Параллельный метод и асинхронный метод
- 12. iPhone: Асинхронный метод HEAD
- 13. Асинхронный метод не-void
- 14. Лучший асинхронный метод while
- 15. Асинхронный синхронный метод
- 16. Рефактор асинхронный метод
- 17. метод Асинхронный не вызывая
- 18. Асинхронный метод для QueueClient.Receive()?
- 19. асинхронный метод выполнения
- 20. Асинхронный метод блокировки вручную
- 21. Асинхронный метод возврата типа?
- 22. Как приостановить асинхронный метод?
- 23. Асинхронный Метод скачет ждут
- 24. Нет Асинхронный метод
- 25. Сделать асинхронный метод синхронным
- 26. Асинхронный очередь метод Javascript
- 27. Как вызвать асинхронный метод?
- 28. Как преобразовать метод в асинхронный метод
- 29. Асинхронный модификатор в C#
- 30. Запустить метод асинхронный на сервере
Спасибо за ответ. Но я не знаю, как обрабатывать огромную передачу данных приложением сокета. Можете ли вы дать мне некоторые идеи, пожалуйста? – Jatin
@Jatin: Без какой-либо идеи о том, что вы делаете с данными впоследствии, трудно понять, что предложить. Например, вы можете записать данные на диск, как вы его получите. –
ОК получил. Спасибо за помощь. – Jatin