<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3728234</guid>
        <pubDate>Fri, 16 Jun 2017 07:22:13 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3728234</link>
        <description><![CDATA[vanass: Да хотелось бы исходники плсмотреть,интересно <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2017-06-16T10:23:14+03:00">16.06.17, 07:23</time></span></span><br>
<strong class='tag-b'>maxim1988</strong>поделишься？]]></description>
        <author>vanass</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652660</guid>
        <pubDate>Fri, 12 Feb 2016 08:06:35 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652660</link>
        <description><![CDATA[maxim1988: в общем во всем разобрался все сделал всем спасибо за помощь если кому интересно могу скинуть код<br>
<br>
а вообще все задание выглядело вот так<br>
<br>
Нужно написать сервер и 2 типа клиента.<br>
На сервере работает синхронизированная очередь из N сообщений. Идет прием сообщений и отправка клиентам одновременно по TCP протоколу. <br>
<br>
Если очередь не заполнена, то сервер каждые K секунд посылает UDP пакет &quot;Жду сообщений&quot; в локальную сеть. Если клиент 1-го типа получает этот пакет, то отправляет по TCP сообщение (время T обработки сообщения, длина случайной строки, случайная строка) . После отправки сообщения клиент засыпает на время T. Строка случайной длины и время T - генерируется случайно, максимальная длина строки и интервал времени задается через константы. Как только очередь заполняется, то сервер перестает слать UDP оповещение.<br>
<br>
Если в очереди есть сообщения, то сервер посылает каждые L секунд UDP пакет &quot;есть сообщения&quot; в локальную сеть.<br>
Клиент 2-го типа получив такой UDP пакет устанавливает соединение с сервером и получает по TCP от сервера сообщение со строкой. Обрабатывает T секунд(просто спит) и только после сможет опять получать сообщения. Как только очередь опусташается, то сервер перестает слать UDP оповещение.<br>
<br>
Кол-во клиентов 1-го и 2-го типа может быть неограниченно.<br>
Реализовать сервер и клиенты на языке С. Использовать компилятор gcc. Стандарт языка С99. Результаты выкладывать на git сервер <a class='tag-url' href='http://bitbucket.org' target='_blank'>http://bitbucket.org</a>.<br>
Допускается написание сервера на Java, а клиенты на С.<br>
Для упаковки и распаковки сообщения между клиентами и сервером использовать библиотеку protobuf-c.<br>
<a class='tag-url' href='https://github.com/protobuf-c/protobuf-c' target='_blank'>https://github.com/protobuf-c/protobuf-c</a>]]></description>
        <author>maxim1988</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652523</guid>
        <pubDate>Thu, 11 Feb 2016 10:02:15 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652523</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407982&view=findpost&p=3652522'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ter_nk_ &#064; <time class="tag-quote__quoted-time" datetime="2016-02-11T09:59:18+00:00">11.02.16, 09:59</time></span><div class='quote '>Так и я же говорю - файл и сравни два файла. </div></div><br>
Я позволил себе вашу мысль изложить более системно... :)]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652522</guid>
        <pubDate>Thu, 11 Feb 2016 09:59:18 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652522</link>
        <description><![CDATA[ter_nk_: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407982&view=findpost&p=3652521'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Oleg2004 &#064; <time class="tag-quote__quoted-time" datetime="2016-02-11T09:55:35+00:00">11.02.16, 09:55</time></span><div class='quote '>Надо попробовать сделать и то и другое просто на одной машине без пересылки по сети.</div></div><br>
<br>
Так и я же говорю - файл и сравни два файла.]]></description>
        <author>ter_nk_</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652521</guid>
        <pubDate>Thu, 11 Feb 2016 09:55:35 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652521</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407982&view=findpost&p=3652493'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>maxim1988 &#064; <time class="tag-quote__quoted-time" datetime="2016-02-11T04:02:15+00:00">11.02.16, 04:02</time></span><div class='quote '>мне нужен на чистом си<br>
понимаю что можно сделать по аналогии но в плюсах я не силен вообще </div></div><br>
Не надо сразу сдаваться. :no: <br>
Сейчас примеры на чистом Си найти можно разве только что в книжках.<br>
В том примере нет ни классов, ни наследования и всего прочего. Пара тройка может быть пока непонятных моментов - почитайте и все станет на свои места. Основная логика ведь не языком определяется. А сокетные операции - так они вообще чисто сишные.<br>
Потратьте пару часов - и все будет ОК&#33; :) <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407982&view=findpost&p=3652493'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>maxim1988 &#064; <time class="tag-quote__quoted-time" datetime="2016-02-11T04:02:15+00:00">11.02.16, 04:02</time></span><div class='quote '>wireshark показывает что все отправляется но извлечь не выходит </div></div><br>
Значит два варианта - или сериализуете криво, или десериализуете - криво.<br>
Надо попробовать сделать и то и другое просто на одной машине без пересылки по сети.<br>
Если все пройдет - тогда уж пенять на сеть...или по крайней мере на формирование сетевых операций.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652493</guid>
        <pubDate>Thu, 11 Feb 2016 04:02:15 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652493</link>
        <description><![CDATA[maxim1988: <strong class='tag-b'>Oleg2004</strong>есть ощущение просто к слову пришлось<br>
wireshark показывает что все отправляется но извлечь не выходит <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-02-11T04:04:32+00:00">11.02.16, 04:04</time></span></span><br>
<strong class='tag-b'>Oleg2004</strong>ну и да пример плюсовый мне нужен на чистом си<br>
понимаю что можно сделать по аналогии но в плюсах я не силен вообще]]></description>
        <author>maxim1988</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652342</guid>
        <pubDate>Wed, 10 Feb 2016 10:13:57 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652342</link>
        <description><![CDATA[Oleg2004: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=407982&view=findpost&p=3652080'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>maxim1988 &#064; <time class="tag-quote__quoted-time" datetime="2016-02-09T08:18:05+00:00">09.02.16, 08:18</time></span><div class='quote '>есть ощущение что сообщение отправляется все таки</div></div><br>
Странная для программиста новая категория - &quot;ощущение&quot; :) <br>
Практически любой сниффер позволит вам точно определить, что пришло, когда и сколько.<br>
Кстати, вот <a class='tag-url' href='http://stackoverflow.com/questions/9496101/protocol-buffer-over-socket-in-c' target='_blank'> здесь </a> есть очень хороший пример использования protobuf для клиент/серверного приложения.]]></description>
        <author>Oleg2004</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652250</guid>
        <pubDate>Wed, 10 Feb 2016 03:26:10 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652250</link>
        <description><![CDATA[maxim1988: <strong class='tag-b'>ter_nk_</strong>да вы правы с define разобрался это я затупил<br>
но проблемы это не решило]]></description>
        <author>maxim1988</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652210</guid>
        <pubDate>Tue, 09 Feb 2016 18:34:56 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652210</link>
        <description><![CDATA[ter_nk_: Так сразу<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">size_t msg_len =sizeof(MAX_MSG_SIZE);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
это переменная или define<br>
<br>
Сначала вытащи это в стандартный вывод или файл. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2016-02-09T18:35:22+00:00">09.02.16, 18:35</time></span></span><br>
Это к то что размер принимаемых данных 4 максимальный]]></description>
        <author>ter_nk_</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652080</guid>
        <pubDate>Tue, 09 Feb 2016 08:18:05 +0000</pubDate>
        <title>Отправка структуры по TCP (protobuf) - C Linux</title>
        <link>https://forum.sources.ru/index.php?showtopic=407982&amp;view=findpost&amp;p=3652080</link>
        <description><![CDATA[maxim1988: Здравствуйте<br>
Суть вопроса<br>
Есть задание обмена сообщения между сервером и клиентом сообщения сериализуются/десереализуются при помощи protobuf<br>
собственно сама вопрос как отправить по TCP сериализованное сообщение а на другой стороне его же и извлечь?<br>
вот так вот сериализую и отправляю<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">AMessage msg = AMESSAGE__INIT;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void *buf; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;unsigned len;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;msg.stroka=&quot;message from the client&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;msg.t = 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp;msg.dlinastroki = strlen(msg.stroka);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fprintf(stderr,&quot;PARAMETRS %d %s %d\n&quot;,msg.t,msg.stroka,msg.dlinastroki);</div><div class="code_line">&nbsp;&nbsp; &nbsp;len = amessage__get_packed_size(&amp;msg);</div><div class="code_line">&nbsp;&nbsp; &nbsp;buf = malloc(len);</div><div class="code_line">&nbsp;&nbsp; &nbsp;amessage__pack(&amp;msg,buf);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fprintf(stderr,&quot;Writing %d serialized bytes\n&quot;,len); </div><div class="code_line">if (send(sock, buf,len, 0) != len)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DieWithError(&quot;send() sent a different number of bytes than expected&quot;);</div></ol></div></div></div></div><br>
<br>
вот так вот принимаю и распаковываю<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">AMessage *msg;</div><div class="code_line">&nbsp;&nbsp; uint8_t buf[MAX_MSG_SIZE];</div><div class="code_line">size_t msg_len =sizeof(MAX_MSG_SIZE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ((recvMsgSize = recv(clntSocket, buf,msg_len, 0)) &#60;msg_len)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;DieWithError(&quot;recv() failed&quot;);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; // size_t msg_len =sizeof(MAX_MSG_SIZE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;recover 1\n&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp;msg = amessage__unpack(NULL, msg_len, buf);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot; stroka=%s\n&quot;,msg-&#62;stroka);</div></ol></div></div></div></div><br>
но код не работает<br>
есть ощущение что сообщение отправляется все таки но не извлекается при извлечении появляется вот такая ошибка<br>
data too short after length-prefix of 23<br>
make: *** [serv] Segmentation fault (core dumped)]]></description>
        <author>maxim1988</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	