<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Портовый приёмник]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8809</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8809&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Портовый приёмник».]]></description>
		<lastBuildDate>Sat, 14 Nov 2015 15:25:56 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=99024#p99024</link>
			<description><![CDATA[<p><a href="https://autohotkey.com/board/topic/53827-ahksock-a-simple-ahk-implementation-of-winsock-tcpip">Если у кого-то возникнет подобный вопрос еще раз.</a></p><p>В локальной сети все работает. Пытался через интернет, но, скорей всего из-за роутера, не работает, возможно поможет &quot;открытие порта&quot; на роутере.</p><p>На всякий случай в файле все скрипты автора и библиотека. Все скрипты работают через порт 27015.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Sat, 14 Nov 2015 15:25:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=99024#p99024</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76678#p76678</link>
			<description><![CDATA[<p>Проблема более не актуальна.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Tue, 29 Oct 2013 21:49:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76678#p76678</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76659#p76659</link>
			<description><![CDATA[<p>Для чтения из сокета функция recv применяется вроде. Не вижу, чтобы код немца что-то читал вообще. Если речь о переменной wsaData, то она нужна для инициализации WSA, насколько помню.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 29 Oct 2013 12:10:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76659#p76659</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76637#p76637</link>
			<description><![CDATA[<p>2. Может это нужно обнулять:<br /></p><div class="codebox"><pre><code>DllCall(&quot;Ws2_32\WSACleanup&quot;)</code></pre></div><p>и заново вызывать DLLку в начале...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Tue, 29 Oct 2013 10:24:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76637#p76637</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76506#p76506</link>
			<description><![CDATA[<p>Наткнулся на <a href="http://www.autohotkey.com/de/forum/topic4544.html">пост</a> одного немца, который написал скрипт AHK-UDP-LAN chat.<br />Скрипт целиком и полностью состоит из DllCall&#039;ов, в которых я ни бельмеса не понимаю, а код к тому же не содержит комментариев даже на немецком.</p><p>Методом проб удалось убрать из скрипта лишнее и получилось это:<br /></p><div class="codebox"><pre><code>#SingleInstance, Force
OnExit, ExitSub

; Settings.
checkPeriod := 1000
port := 9    ; Port to monitor.

; Some initial voodoo magic.
VarSetCapacity(wsaData, 32)
VarSetCapacity(SocketAddress, 16)
VarSetCapacity(U, 1) ; It was 1024, but 1 works too.
DllCall(&quot;Ws2_32\WSAStartup&quot;, &quot;UShort&quot;, 0x0002, &quot;UInt&quot;, &amp;wsaData)
DllCall(&quot;Ws2_32\socket&quot;, &quot;Int&quot;, 2, &quot;Int&quot;, 2, &quot;Int&quot;, 17)
InsertInteger(2, SocketAddress, 0, 2)
InsertInteger(DllCall(&quot;Ws2_32\htons&quot;, &quot;UShort&quot;, Port), SocketAddress, 2, 2)
InsertInteger(DllCall(&quot;Ws2_32\inet_addr&quot;, &quot;Str&quot;, 0), SocketAddress, 4, 4)
DllCall(&quot;Ws2_32\bind&quot;, &quot;UInt&quot;, 284, &quot;UInt&quot;, &amp;SocketAddress, &quot;Int&quot;, 16)

Loop    ; Periodic check.
{
    DllCall(&quot;Ws2_32\ioctlsocket&quot;, &quot;UInt&quot;, 284, &quot;UInt&quot;, 0x4004667f, &quot;UInt&quot;, &amp;U)
    If NumGet(U) != 0
        trigger(port)
    Sleep, checkPeriod
}

InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4)    ; Voodoo magic.
{
    Loop %pSize%
        DllCall(&quot;RtlFillMemory&quot;, &quot;UInt&quot;, &amp;pDest + pOffset + A_Index-1, &quot;UInt&quot;, 1, &quot;UChar&quot;, pInteger &gt;&gt; 8*(A_Index-1) &amp; 0xFF)
}

trigger(port)    ; We got a packet.
{
    MsgBox, The incoming packet on port %port% was received!
    Reload
}

ExitSub:    ; Clean something upon exit.
DllCall(&quot;Ws2_32\WSACleanup&quot;)
ExitApp</code></pre></div><p>этот скрипт реагирует на любой входящий пакет по указанному порту.</p><p>Но в нём есть 2 недостатка:<br />1. мне не удалось заставить MsgBox выводить содержимое полученного пакета.<br />2. после получения пакета приходится перезапускать скрипт, т.к. иначе следующая проверка снова приводит к срабатыванию триггера. Это &quot;overkill&quot;, но я не нашёл как заставить скрипт продолжать работать но забыть о ранее полученном пакете. Пробовал обнулять переменную - не помогло. Более того, она всегда якобы пустая, только её длина каждый раз отличается. Пробовал менять его длину обратно в 0 через VarSetCapacity - не помогло.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Sat, 26 Oct 2013 19:43:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76506#p76506</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Портовый приёмник]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76399#p76399</link>
			<description><![CDATA[<p>Помогите написать простейший сценарий портового приёмника.<br />Мне всего-то и нужно, чтобы сценарий следил за указанным портом и при приёме любых пакетов, отправленных на этот порт - сценарий бы просто выдавал бы содержимое этих пакетов через оповещение с помощью MessageBox.</p><p>Я пробовал использовать вместе с <a href="http://www.autohotkey.com/board/topic/53827-ahksock-a-simple-ahk-implementation-of-winsock-tcpip/">этой</a> библиотекой следующий сценарий:<br /></p><div class="codebox"><pre><code>#Persistent
AHKsock_Listen(9, notify) ; I&#039;ve also tried AHKsock_Listen(9, &quot;notify&quot;)

notify()
{
    msgbox port 9 received a packet!
}</code></pre></div><p>Но при приёме пакетов - сценарий не срабатывает должным образом.<br />В другом месте мне посоветовали такой сценарий:<br /></p><div class="codebox"><pre><code>AHKsock_Listen(9, &quot;notify&quot;)

notify(sEvent, iSocket = 0, sName = 0, sAddr = 0, sPort = 0, ByRef bData = 0, bDataLength = 0)
{
  str := &quot;Event: &quot; sEvent &quot;`nIP: &quot; sAddr &quot;`nPort: &quot; sPort
  if (sEvent = &quot;RECEIVED&quot;)
  {
    str := &quot;`n These bytes were received:`n{&quot;
    Loop % bDataLength
      str .= NumGet(bData, A_Index-1, &quot;uchar&quot;) &quot;, &quot;
    str := SubStr(str, 1, StrLen(str)-2) &quot;}&quot;
  }

  Msgbox % str
}</code></pre></div><p>Но и он не работает.</p>]]></description>
			<author><![CDATA[null@example.com (Drugoy)]]></author>
			<pubDate>Thu, 24 Oct 2013 13:21:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76399#p76399</guid>
		</item>
	</channel>
</rss>
