<?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=8809&amp;type=atom" />
	<updated>2015-11-14T15:25:56Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8809</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=99024#p99024" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2015-11-14T15:25:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=99024#p99024</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76678#p76678" />
			<content type="html"><![CDATA[<p>Проблема более не актуальна.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-10-29T21:49:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76678#p76678</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76659#p76659" />
			<content type="html"><![CDATA[<p>Для чтения из сокета функция recv применяется вроде. Не вижу, чтобы код немца что-то читал вообще. Если речь о переменной wsaData, то она нужна для инициализации WSA, насколько помню.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-10-29T12:10:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76659#p76659</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76637#p76637" />
			<content type="html"><![CDATA[<p>2. Может это нужно обнулять:<br /></p><div class="codebox"><pre><code>DllCall(&quot;Ws2_32\WSACleanup&quot;)</code></pre></div><p>и заново вызывать DLLку в начале...</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2013-10-29T10:24:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76637#p76637</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76506#p76506" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-10-26T19:43:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76506#p76506</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Портовый приёмник]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76399#p76399" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-10-24T13:21:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76399#p76399</id>
		</entry>
</feed>
