1

Тема: AHK: AHKsock, Winsock. Send/Recived данных, отличных от строки/Char

Здоровья всем!
Посоветуйте пожалуйста способ.
AHKsock, по которой вопрос.
Здесь и, например, здесь, если правильно понял, дядьки говорят, что поскольку независимо от типа данных, передача осуществляется в виде последовательности байт, то для сообщения(SEND) необходимо указывать корректный размер отправляемого потока этих самых байт. Со строкой всё предельно просто - "StrLen()*2", а вот как быть например, в случае, если необходимо отправить массив? Просто сложить длины данных по всем его индексам и отправить, не получается. Или, что не менее вероятно, я не правильно пытаюсь получать данные, которые приходят от отправителя, действуя тем же способом, словно это типичная переменная описываемого процесса:


if (sEvent == "RECEIVED")
	MsgBox,,Title,% bRecvData.Length()

2

Re: AHK: AHKsock, Winsock. Send/Recived данных, отличных от строки/Char

О каком массиве речь? Если о том, что в АНК, то это объект, т.е. что-то хитрое, в отличие от простого массива, где энное число одинаковых по размеру (!) кусочков данных лежат цепочкой рядом вплотную друг к другу. С таким массивом можно обращаться и как с последовательностью байт. А массив АНК может хранить данные своих членов где угодно, т.е. они лежат вразброс. Соответственно, чтобы передать их, как одно целое, их надо сначала уложить в одно целое — записать один подле другого в буфер памяти. А на том конце получатель должен знать, по какому алгоритму разбирать этот сплошной поток байтов на отдельные члены массива.

3

Re: AHK: AHKsock, Winsock. Send/Recived данных, отличных от строки/Char

Тоже верно. Тут даже описано, как примерно это сделать. Вот только получается на выходе та же строка. На каком-то форуме советовали в начало каждого такого элемента укладываемого в поток, пихать символ-разделитель, который облегчит обратное превращение на другом конце провода.
Мой вопрос из чистого любопытства. Возник из того, что по шаблону, данные приходится превращать в строку, посылать к потребителю, а там превращать их в исходное состояние. Проблемы в этом нет и на обтекаемость не влияет, просто стало интересно - есть ли возможность отправлять данные "как есть". Друг, ваяющий на C# посоветовал ещё покурить мануалы по сериализации. Там что-то вроде упаковки данных по нужному объекту в бинарник, который отправляется файлом, а на той стороне десериализуется по известному алгоритму. Но это по сути новые танцы со старым бубном, где исходные данные превращаются в некий употребимый вид для транспортировки, чтобы за тем пройти обратное превращение. Это скорее хорошо для объектов класса, построением которых я пока не умею правильно пользоваться. В этом месте, целесообразность возвращает меня к пониманию того, что гораздо проще пользовать уже обкатанный велосипед, а не изобретать новый.

За комментарии низкий поклон!