<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Работа с данными]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=12813&amp;type=atom" />
	<updated>2017-07-17T17:28:52Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=12813</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117323#p117323" />
			<content type="html"><![CDATA[<p>Да, всё спасибо. Вопрос решен.</p>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2017-07-17T17:28:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117323#p117323</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117321#p117321" />
			<content type="html"><![CDATA[<p>Не обязательно выделять ник адресата сообщения в беседе из двух участников, как это не обязательно делать, если оно адресовано автору предыдущего поста. Следующим, стоит уточнить в ответе проблему, потому как на этом моменте я не понимаю сущность задачи, которую Вы перед собой поставили и главный её момент отобразить в названии темы этой беседы переименовав её как-то так -&gt; &quot;AHKsock. &#039;Суть проблемы&#039;.&quot;</p><p>На вопрос из первого сообщения &quot;Как это сделать?&quot; - попытка ответить прозвучала.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2017-07-17T17:25:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117321#p117321</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117318#p117318" />
			<content type="html"><![CDATA[<p><strong>KusochekDobra</strong> Не договорил насчет скрипта) <br />Строение пакета таково:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>; Суть отправки<br />; 	#пакет, type, L, &lt;тело сообщения&gt;<br />;&nbsp; &nbsp;type: 0 - ok (отправляет взамен &quot;ok&quot; при условии, что пакет был получен)<br />;		&nbsp; 1 - text<br />;		&nbsp; 2 - img<br />;		&nbsp; 3 - file<br />;		&nbsp; 4 - log<br />; Пример:<br />; 	&quot;#5, 1, 12, привет&quot;</p><p>То есть, #5 - номер отправляемого пакета, с каждой отправкой число увеличивается. Потом идет тип пакета, если какой-то текст то соответственно &quot;text&quot; и.т.д. L- длина тела сообщения. &lt;тело сообщения&gt; - Сами данные</p><p>У меня сейчас стоит скрипт на приёме, в котором есть условие:<br />If(StrLen(&lt;тело сообщения&gt;)*2 &gt; L)<br />	return -1</p><p>В кратце: если весит больше чем нужно, то return и потом отключаю его чтоб ошибок много не было.</p></div></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2017-07-17T16:22:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117318#p117318</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117317#p117317" />
			<content type="html"><![CDATA[<p>Давайте вместе подумаем. Получать строку из её бинарного представления Вы умеете, следовательно, текстовые маркеры между сообщениями должны быть читаемы. Если это так, разделить строку на сообщения содержащиеся в ней - не проблема. Проблемой может стать понимание на стороне клиента, как обрабатывать сообщение, если оно НЕ текст. Значит, в маркере должен быть не только разделитель, но и указание на принадлежность следующего за ним двоичного кода, к какому-либо типу, или иной характеристике. Таким образом, вначале каждого сообщения можно разместить в таком же, текстовом виде тип сообщения и его расширение и обрабатывать их соответствующим образом.<br /></p><div class="codebox"><pre><code>
msgSeparator	:= &quot;&lt;|&quot;
paramSeparator	:= &quot;ж&quot;

incomingMSG		:= &quot;&lt;|text,msgжHello World!&lt;|file,exeж1001011101101010...110111010110&lt;|sound,mp3ж100000010100010011...0111011001&quot;
allData := StrSplit(incomingMSG,msgSeparator)
</code></pre></div><p>Теперь, в массиве &quot;allData&quot; хранится каждое сообщение по отдельности. Получить и обработать каждое из них можно похожим образом:<br /></p><div class="codebox"><pre><code>
Loop,% allData.Length() {
	msgData		:= StrSplit(allData[A_Index],paramSeparator)	; Отделить сообщение от параметров
	paramData	:= StrSplit(msgData[1],&quot;,&quot;)						; Разделить параметры
	ProcessMessage(msgData[2],paramData[1],paramData[2])		; Отправить в функцию на обработку
}

ProcessMessage(msg,type,ext) {
	if (type == &quot;file&quot;) {
		if (ext == &quot;exe&quot;) {
			; код обрабатывающий сообщение
		} else if (false) { ; другое расширение
			; код обрабатывающий сообщение
		}
	} else if (type == &quot;sound&quot;) {
		if (ext == &quot;mp3&quot;) {
			; код обрабатывающий сообщение
		} else if (false) { ; другое расширение
			; код обрабатывающий сообщение
		}
	} else if (type == &quot;text&quot;) {
		if (ext == &quot;msg&quot;) {
			; код обрабатывающий сообщение
		} else if (false) { ; другое расширение
			; код обрабатывающий сообщение
		}
	}
}
</code></pre></div><p>Вместо - &quot;код обрабатывающий сообщение&quot; - лучше сделать вызов функций, которые будут этим заниматься. Так же, в маркер можно помещать и длину сообщения. Это позволит отделять данные разных сообщений &quot;налету&quot;. Ведь если известна длина сообщения, то заполненный в это значение лимит и будет означать его окончание.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2017-07-17T16:05:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117317#p117317</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117310#p117310" />
			<content type="html"><![CDATA[<p><strong>KusochekDobra</strong> </p><div class="quotebox"><blockquote><p>Имеет смысл покурить примеры <span style="color: red">из этой темы</span>. Рассмотрены все популярные задачи при передаче данных, включая файлы.</p></blockquote></div><p> Именно это я использую. На сокетах работает скрипт. У меня в конце каждого пакета стоит разделитель, только вот как разделить данные? Я же не смогу при помощи RegExReplace() это всё разделить на две(а то и на три) части, правильно? RegEx работает с текстом, а не с &quot;10001...&quot;.</p>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2017-07-17T10:32:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117310#p117310</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117302#p117302" />
			<content type="html"><![CDATA[<p>Имеет смысл покурить примеры <a href="https://autohotkey.com/board/topic/53827-ahksock-a-simple-ahk-implementation-of-winsock-tcpip/">из этой</a> темы. Рассмотрены все популярные задачи при передаче данных, включая файлы.</p><p>Может кто более дословно поймёт, но на мой взгляд, очень расплывчато сформулирован вопрос, оставляя ощущение, что их скорее несколько.</p><p>По поводу - &quot;Попробуй разделить одно от другого&quot;, при первом опыте возни с AHKsock, встречал упоминания на РУ-форумах, что после отправки очередного сообщения полезно вставлять &quot;разделитель&quot;. Символ, или набор символов, натыкаясь на который, приёмник сообщения понимает, что предыдущее сообщение завершено. В него можно включать параметры, которые дополнительно могут как-то характеризовать тип следующего сообщения, будь то текст, или файл. Но у меня такой задачи не стояло, поэтому опытом поделиться не смогу. В любом случае, если в процессе получения данных ожидать заранее известные наборы разделителей, то проще и мух от котлет отделять и понимать, где, собственно мухи и где котлеты. Передаются ведь по сети в любом случае лишь нули и единицы, даже если это обычный текст.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2017-07-16T21:54:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117302#p117302</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Работа с данными]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=117301#p117301" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Даже не знаю как тему назвать, но думаю суть понятна. &quot;AHK: Работа с данными&quot;</p></blockquote></div><p>Начну с самого начала: есть сервер и клиент. Оба обмениваются текстом(без проблем). Радовался по началу когда достиг такого &quot;успеха&quot;.(Для меня это уже успех(^_^) ) После, задумался как обмениваться не только текстом, но и файлами.. И вот тут настала тяжелая пора. Всё вроде хорошо отправляется, но есть одно большое НО.. Сервер и клиент пользуются протоколами TCP - то есть данные при отправки доходят с точностью 99%(у меня пока что данные не терялись)<br />Проблема&nbsp; заключается в том что когда отправляешь какой-нибудь текст и через секунду данные(к примеру картинку) - то есть вероятность что оно придет склеенное(суть протокола TCP). К примеру:<br />Отправляю:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Hello World!<br />*101000101.... данные картинки*</p></div></div><p>Получаю:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Hello World!*101000101.... данные картинки*</p></div></div><p>Ответ должен прозвучать типо.. &quot;<span style="color: blue">Попробуй разделить одно от другого</span>&quot;. А вопрос: <span style="color: red">Как это сделать?</span><br />Думаю объяснил по максимуму. <br />Ещё немного инфы:<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><p>Когда приходят данные, то вызывается функция<br />Peer(sAction, iSocket = 0, sName = 0, sAddr = 0, sPort = 0, ByRef bNewData = 0, bNewDataLength = 0)<br />{<br />	...<br />}<br />и в <span style="color: red">ByRef bNewData = 0</span> сохраняются данные.</p></div></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2017-07-16T20:13:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=117301#p117301</id>
		</entry>
</feed>
