<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Сокеты в С//С++ чтение данных</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html</link>
    <description>Доброго дня суток.&lt;br&gt;&lt;br&gt;Экспериментирую с сокетами на Сях. Никак не могу понять как получить конец данных при использовании read. &lt;br&gt;Т.е:&lt;br&gt;&lt;br&gt;Какие то действия ...&lt;br&gt;...&lt;br&gt;while (true) &#123;&lt;br&gt;switch (nread=read(client_fd,buf,sizeof(buf))) &#123;&lt;br&gt;        case 0:&lt;br&gt;            printf(&quot;конец&#092;r&#092;n&quot;);&lt;br&gt;            break;&lt;br&gt;        case -1:&lt;br&gt;            printf(&quot;error&#092;r&#092;n&quot;);&lt;br&gt;            break;&lt;br&gt;        default:&lt;br&gt;            printf(buf);&lt;br&gt;            continue;&lt;br&gt;&lt;br&gt;        &#125;&lt;br&gt;&#125;&lt;br&gt;...&lt;br&gt;Продолжаю какие то действия.&lt;br&gt;&lt;br&gt;После чтения всех данных сокет продолжает принимать данные, т.е. не может попасть в case 0;&lt;br&gt;Пробовал сделать не блокируемый сокет, но тогда после пересылки всех данных он попадает в case -1;&lt;br&gt;&lt;br&gt;Как в блокируемом сокете добиться конца передачи данных, т.е. попасть в case 0?&lt;br&gt;Или нужно реализовывать самому конец данных, что то типа bye? &lt;br&gt;&lt;br&gt;&lt;br&gt;Спасибо за ответы.&lt;br&gt;</description>

<item>
    <title>Сокеты в С//С++ чтение данных (Heretic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#7</link>
    <pubDate>Tue, 14 Dec 2010 20:09:31 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Благодарю.&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; можно, все можно, разработайте сначала протокол, по которому вы будете обмениваться. а &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; что бы его разработать изучите уже существующие. простенькие какие нибудь.&lt;br&gt;&amp;gt;&amp;gt; Отличный совет, не кинете ли URL на документацию, или посоветует какую книгу, &lt;br&gt;&amp;gt;&amp;gt; для дальнейшего вкуривания :)?&lt;br&gt;&amp;gt; хорошая книга Шон Уолтон Создание сетевых приложенией в среде Linux Руководство разработчика &lt;br&gt;&amp;gt; и для перл программирования Линкольн Штайн Разработка сетевых программ на Perl &lt;br&gt;&amp;gt; перл просто незаменим когда надо быстренько сверстать какой нибудь макет. а также &lt;br&gt;&amp;gt; написать клиента имитирующего работу удаленной стороны.&lt;br&gt;&lt;br&gt;Спасибо большое. То что нужно, у меня как раз взаимодействие с Perl :)&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#6</link>
    <pubDate>Tue, 14 Dec 2010 15:47:46 GMT</pubDate>
    <description>&amp;gt; Благодарю.&lt;br&gt;&amp;gt;&amp;gt; можно, все можно, разработайте сначала протокол, по которому вы будете обмениваться. а &lt;br&gt;&amp;gt;&amp;gt; что бы его разработать изучите уже существующие. простенькие какие нибудь.&lt;br&gt;&amp;gt; Отличный совет, не кинете ли URL на документацию, или посоветует какую книгу, &lt;br&gt;&amp;gt; для дальнейшего вкуривания :)?&lt;br&gt;&lt;br&gt;хорошая книга Шон Уолтон Создание сетевых приложенией в среде Linux Руководство разработчика&lt;br&gt;и для перл программирования Линкольн Штайн Разработка сетевых программ на Perl&lt;br&gt;&lt;br&gt;перл просто незаменим когда надо быстренько сверстать какой нибудь макет. а также написать клиента имитирующего работу удаленной стороны.&lt;br&gt;</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (Heretic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#5</link>
    <pubDate>Mon, 13 Dec 2010 20:32:51 GMT</pubDate>
    <description>Роясь на просторах интернета я нашел следующее:&lt;br&gt;&amp;gt;Сервер должен либо знать этот размер, либо &lt;br&gt;&amp;gt;уметь определить его конец, чтобы быть уверенным в получении его целиком. Это определяется &lt;br&gt;&amp;gt;протоколом. Например, некоторые протоколы использует в качестве метки конца строку &lt;br&gt;&amp;gt;&quot;/r/n/r/n&quot;. Или можно передатьразмер от клиента первыми байтами пакета. Какой способ &lt;br&gt;&amp;gt;выбрать, решать придётся Вам, но что-то должно быть обязательно.</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (Heretic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#4</link>
    <pubDate>Mon, 13 Dec 2010 20:00:18 GMT</pubDate>
    <description>Благодарю.&lt;br&gt;&lt;br&gt;&amp;gt; можно, все можно, разработайте сначала протокол, по которому вы будете обмениваться. а &lt;br&gt;&amp;gt; что бы его разработать изучите уже существующие. простенькие какие нибудь.&lt;br&gt;&lt;br&gt;Отличный совет, не кинете ли URL на документацию, или посоветует какую книгу, для дальнейшего вкуривания :)?&lt;br&gt;</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#3</link>
    <pubDate>Mon, 13 Dec 2010 19:16:50 GMT</pubDate>
    <description>&amp;gt; Спасибо что ответили.&lt;br&gt;&amp;gt;&amp;gt; 1 вы уже сказали &lt;br&gt;&amp;gt; Не понял :) Что именно я сказал :) &lt;br&gt;&lt;br&gt;&quot;ли нужно реализовывать самому конец данных&quot;&lt;br&gt;в строковых протоколах это конец линии.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; 2 нужно чтобы сервер закрыл соединение сам &lt;br&gt;&amp;gt;&amp;gt; 3 нужно в клиенте организовать отслеживание тайм аута.&lt;br&gt;&amp;gt; Сервер закрывает соединение, но должен пройти диалог, клиент посылает данные, сервер соответственно &lt;br&gt;&amp;gt; читает их. Так вот сервер блокируется на чтении данных и не &lt;br&gt;&amp;gt; понимает когда данные заканчиваются, а сокеты EOF не понимают.&lt;br&gt;&amp;gt; Как я понял можно сделать так, 1. отслеживать конец сообщения с помощью &lt;br&gt;&amp;gt; какого нибудь ключевого символа//слова; &lt;br&gt;&amp;gt; 2. посылать сначала размер данных которые будут получены и после получения принимать &lt;br&gt;&amp;gt; основные данные основываясь на размере завершать прием данных.&lt;br&gt;&lt;br&gt;можно, все можно, разработайте сначала протокол, по которому вы будете обмениваться. а что бы его разработать изучите уже существующие. простенькие какие нибудь.&lt;br&gt;&lt;br&gt;но отслеживать тайм аут необходимо в любой операции чтения, тк н</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (Heretic)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#2</link>
    <pubDate>Sun, 12 Dec 2010 20:37:52 GMT</pubDate>
    <description>Спасибо что ответили.&lt;br&gt;&lt;br&gt;&amp;gt; 1 вы уже сказали &lt;br&gt;&lt;br&gt;Не понял :) Что именно я сказал :)&lt;br&gt;&lt;br&gt;&amp;gt; 2 нужно чтобы сервер закрыл соединение сам &lt;br&gt;&amp;gt; 3 нужно в клиенте организовать отслеживание тайм аута.&lt;br&gt;&lt;br&gt;Сервер закрывает соединение, но должен пройти диалог, клиент посылает данные, сервер соответственно читает их. Так вот сервер блокируется на чтении данных и не понимает когда данные заканчиваются, а сокеты EOF не понимают. &lt;br&gt;&lt;br&gt;Как я понял можно сделать так, 1. отслеживать конец сообщения с помощью какого нибудь ключевого символа//слова;&lt;br&gt;2. посылать сначала размер данных которые будут получены и после получения принимать основные данные основываясь на размере завершать прием данных.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Сокеты в С//С++ чтение данных (NuINu)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/8962.html#1</link>
    <pubDate>Sun, 12 Dec 2010 20:17:31 GMT</pubDate>
    <description>&amp;gt; После чтения всех данных сокет продолжает принимать данные, т.е. не может попасть &lt;br&gt;&amp;gt; в case 0; &lt;br&gt;&amp;gt; Пробовал сделать не блокируемый сокет, но тогда после пересылки всех данных он &lt;br&gt;&amp;gt; попадает в case -1; &lt;br&gt;&amp;gt; Как в блокируемом сокете добиться конца передачи данных, т.е. попасть в case &lt;br&gt;&amp;gt; 0?&lt;br&gt;&amp;gt; Или нужно реализовывать самому конец данных, что то типа bye?&lt;br&gt;&lt;br&gt;1 вы уже сказали&lt;br&gt;2 нужно чтобы сервер закрыл соединение сам&lt;br&gt;3 нужно в клиенте организовать отслеживание тайм аута.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;gt; Спасибо за ответы.&lt;br&gt;&lt;br&gt;пожалуйста&lt;br&gt;</description>
</item>

</channel>
</rss>
