2011-12-30 2 views

ответ

3

Нет, совсем нет. Вы не можете контролировать, что происходит, когда вы получаете данные из-за всей обработки сети. Вы не можете делать какие-либо предположения о том, сколько вы получите в любом вызове recv (за исключением того, что это будет < = сумма отправлена). Вы можете получить всего один байт.

+0

Что я имею в виду, в моем примере я получу (например) '' буфер \ 0second bu? '? –

+0

И если да, то как я могу отличить один «пакет» от другого? Должен ли я использовать какую-то последовательность завершения? –

+1

Да, вы также можете получить это. Вам нужно будет что-то в данных, чтобы отличить ваши «пакеты». У вас может быть соглашение, в котором вы отправляете длину «пакета» или какой-либо разделитель, который не будет отображаться в данных. –

0

Нет, Windows-сокеты (например, другие абстракции на основе TCP) являются потоковыми. Вы ищете пакетный способ использования сокетов Windows.

Попробуйте это: http://tangentsoft.net/wskfaq/examples/packetize.html

+0

Точнее, сокеты Windows TCP потоки. Сокеты UDP основаны на сообщениях. Каждый 'send()' в сокете TCP просто добавляет данные в поток и не существует отношения 1 к 1 между 'send()' и 'recv()' в потоках. Каждый 'send()' в UDP-сокете отправляет отдельное сообщение, и есть сообщения 1-к-1 для сообщений. –

0

я бы не полагаться на это. Когда вы читаете, вы можете получить их сразу. Между ними существует много вещей: переупорядочение пакетов, латентность сети и т. Д., Которые влияют, когда ваши пакеты действительно поступают на другую сторону, и может быть, что второй буфер может найти свой путь быстрее, чем первый, и будет ждать (если вы используя TCP, или нет, если нет) для первого. Тогда то, что прибыло, будет дано вам. Вы должны анализировать свои данные на принимающей стороне, не полагаясь на то, как она была отправлена ​​(TCP предоставляет вам определенные гарантии заказа, UDP тоже не делает этого).

0

Для UDP и других протоколов датаграмм, границы пакетов будут сохранены, как вы хотите. Для TCP и других протоколов потока нет такой удачи.

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