2010-04-19 7 views
0

Я новичок в программировании сокетов. Я разрабатываю клиентское приложение сервера.
И я использую Asynchronous tcp ip socket. Но теперь я столкнулся с проблемой. В моей клиентской части я получаю свои данные с помощью массива байтов размером 2 кбайта методом beginReceive. Его работа отлично, если размер данных ниже или равен 2 kb, но проблема возникает при размере данных, превышающем диапазон 2kb.
Пожалуйста, дайте мне некоторое решение.C# асинхронный метод beginend

ответ

1

Это совершенно нормально - вы не должны ожидать получить все данные за один звонок, независимо от того, используете ли вы синхронные или асинхронные вызовы и есть ли у вас много данных или немного.

Вы должны продолжать чтение до тех пор, пока не будет прочитано, что нет данных - или пока у вас не будет всего, что вам нужно. Если вашему протоколу требуется более одного запроса/ответа на соединение, вы должны либо префикс длины, либо сообщение, чтобы другая сторона знала, сколько нужно читать, или иметь какой-то разделитель для указания конца сообщения. Префикс длины намного проще, когда он подходит, но он не просто поддерживает потоковое вещание - вы должны в конечном итоге иметь префиксы с длинными префиксами и последний фрагмент, чтобы указать, когда вы закончите.

+0

Спасибо за ответ. Но я не знаю, как обрабатывать огромную передачу данных приложением сокета. Можете ли вы дать мне некоторые идеи, пожалуйста? – Jatin

+0

@Jatin: Без какой-либо идеи о том, что вы делаете с данными впоследствии, трудно понять, что предложить. Например, вы можете записать данные на диск, как вы его получите. –

+0

ОК получил. Спасибо за помощь. – Jatin

1

Я согласен с ответом Джона, утверждая, что вы не должны ожидать, что все ваши данные будут прочитаны.

Вот некоторые блоги, которые помогли мне с этой проблемой в прошлом: Aviad Ezra имеет отличную серию на Асинхронные сокеты:

Этот блог особенно полезен, если вы решите использовать маршрут с префиксом длины, используемый автором S в MemoryStream в качестве его временного хранения между чтениями:

Смежные вопросы