<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: read склеивает сообщения которые читаются с сокета.</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7242.html</link>
    <description>Есть серверное приложение и клиентские приложения. Если на клиентском приложении подряд отправить несколько сообщений (send) 50 байт. То на сервере при получении сообщения (read)  читается сразу все 100 байт. Как сделать так чтобы read читал каждый раз только столько байт сколько в однома сообщении?&lt;br&gt;</description>

<item>
    <title>read склеивает сообщения которые читаются с сокета. (DeadMustdie)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7242.html#2</link>
    <pubDate>Sun, 09 Mar 2008 16:16:46 GMT</pubDate>
    <description>Вообще для обмена сообщениями поверх TCP всегда можно организовать прикладной протокол-обвертку. Например, перед каждым сообщением отправлять его длину, а при приеме сперва эту длину читать первым recv(), и затем принимать ровно столько октетов, сколько отправила другая сторона.&lt;br&gt;&lt;br&gt;Чтение разумно организовать прерываемым, примерно по такому алгоритму:&lt;br&gt;&lt;br&gt;while ( 1 ) &#123;&lt;br&gt;  poll(); /* с таймаутом, + проверка на ошибки */&lt;br&gt;  if ( пора_закругляться )&lt;br&gt;    break;&lt;br&gt;  if ( есть_что_читать )&lt;br&gt;    recv(); /* + проверка на ошибки */&lt;br&gt;  if ( прочитано_сколько_запросили )&lt;br&gt;    break;&lt;br&gt;&#125;&lt;br&gt;</description>
</item>

<item>
    <title>read склеивает сообщения которые читаются с сокета. (anonymous)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7242.html#1</link>
    <pubDate>Sat, 08 Mar 2008 16:28:35 GMT</pubDate>
    <description>TCP -- потоково-ориентированный протокол.  Если хотите в потоке передавать дискретные &quot;сообщения&quot; -- делайте свою обвязку, например отправляйте сначала количество отправлямых байт, а потом само сообщение. На клиенте читаете размер, потом нужное число байт.&lt;br&gt;</description>
</item>

</channel>
</rss>
