Страница 1 из 1

Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSocket

Добавлено: 2010-08-26 20:28:07
Dimrix
День добрый. Не могу победить данную связку. Нашёл вполне рабочий пример сокет-сервера http://www.lissyara.su/articles/freebsd ... et_server/ от которого можно отталкиваться. Скомпилил, проверил локально и посети - всё отлично работает. Начал прикручивать в АС2.0 - конектится, сообщение удачно отсылается на сервер, но ответа ну никак не хочет видеть. Танцую с бубном уже 3-4 часа - не могу победить. Гугл курил-перекурил, не работает приём и всё тут! Код на АС вот:

Код: Выделить всё

	var socket:XMLSocket = new XMLSocket();
	socket.onXML = xmlReceived;
	socket.onConnect = function(success:Boolean) {
		if (success) {
			speedz.text = "Connection succeeded!" ;
			src = "info\n";
			socket.send(src);
			socket.onData();
	} else {
		speedz.text = "Connection failed!";
	}
};
if (!socket.connect("10.0.254.230", 1667)) {
	_root.speedz.text = "Connection failed!";
}
socket.onClose = function(){
	speedz.text = "Closed!";
}
socket.onData = function(src) {
	speedz2.text = src;
};

function xmlReceived (data) {
	var e = data.firstChild;
	if (e != null && e.nodeName == "MESSAGE"){
		displayMessage(e.attributes.user, e.attributes.text);
		speedz1.text = "dat " + e.attributes.text;
	}
}
ЗЫ: н-ая модификация, уже кучу примеров с тырнету подставлял - тишина мёртвая! :st:

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-08-27 10:10:46
Dambo
О том, что текст поступил полностью, сокет-клиент судит по нулевому байту, которым сервер
должен завершать любое сообщение. Наличие нулевого байта очень важно, так как иначе сообще-
ния будет проблематично разделить (вполне может оказаться так, что часть одного сообщения
придет в TCP-сегменте с другим сообщением). Собственно, событие onData происходит именно
тогда, когда обнаруживается нулевой байт. Текстом же сообщения считается весь текст, получен-
ный от сервера между двумя событиями onData (т. е. участок данных, ограниченный двумя нуле-
выми байтами).
Кстати, хотя нулевой байт и завершает любое сообщение, в его текст, передаваемый обработчику
события onData в параметре, он не включается.
ActionScript 2 - Программирование во Flash MX для профессионалов (Дмитрий Гурский) раздел 17.4.1
А вообще рас уж пишите в разделе этого языка не мешало бы и код сервера на данном языке иначе недалеко от посыла в те форумы где ваш AC будут разбирать профи...

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-08-27 10:25:25
Fastman
Ну в чем проблема ? Добавь на серваке ф-цию логирования. И погляди что приходит и как обрабатывается.
Я просто не знаю AS, Но смотря на код не могу понять как ты вешаешь событие на приход данных.
Судя по гуглу - должно быть чего то вроде:

Код: Выделить всё

xmlsock.addEventListener(DataEvent.DATA, onData); 
private function onData(event:DataEvent):void 
{ 
    trace("[" + event.type + "] " + event.data); 
} 

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-08-27 10:32:26
Fastman
Dambo писал(а):
О том, что текст поступил полностью, сокет-клиент судит по нулевому байту, которым сервер
должен завершать любое сообщение. Наличие нулевого байта очень важно, так как иначе сообще-
ния будет проблематично разделить (вполне может оказаться так, что часть одного сообщения
придет в TCP-сегменте с другим сообщением). Собственно, событие onData происходит именно
тогда, когда обнаруживается нулевой байт. Текстом же сообщения считается весь текст, получен-
ный от сервера между двумя событиями onData (т. е. участок данных, ограниченный двумя нуле-
выми байтами).
Кстати, хотя нулевой байт и завершает любое сообщение, в его текст, передаваемый обработчику
события onData в параметре, он не включается.
ActionScript 2 - Программирование во Flash MX для профессионалов (Дмитрий Гурский) раздел 17.4.1
А вообще рас уж пишите в разделе этого языка не мешало бы и код сервера на данном языке иначе недалеко от посыла в те форумы где ваш AC будут разбирать профи...
Верно. Однако я в обычной практике все таки "изобретаю" свой символ терминации.
Получается нечто:

Код: Выделить всё

RQST001:<node>some data</node>~!~
Где:
(RQST001:) тип запроса (такая штука логику обработки оптимизировать позволяет). От посылки берем первые 8 символов и определяем кто будет обрабатывать. перед обработкой XML вырезаем их.
(~!~) признак окончания посылки.

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-09-16 1:10:21
Dimrix
Со старым вопросом разобрался. Есть новый вопрос!
Вопрос по потоками (многопоточный демон): можно ли в с++ (если можно то как) при работе с потоками создавать глобальную переменную, доступную всем потокам.

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-09-16 1:17:18
Fastman
Dimrix писал(а):Со старым вопросом разобрался. Есть новый вопрос!
Вопрос по потоками (многопоточный демон): можно ли в с++ (если можно то как) при работе с потоками создавать глобальную переменную, доступную всем потокам.
Вот что за совпадение :))) Только прилетел из Амстердама, Отоспался и тут новый вопрос :)
Да конечно можно. Вопрос только стоит зачем ? Для чего это нужно ?
Тут же на самом деле не проблема как это сделать. Проблема как обеспечить нужную атомарность операций. То есть не проблема, мютексы никто не отменял, но кое каких знаний это потребует.

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-09-16 9:29:16
Dambo
Dimrix писал(а):Со старым вопросом разобрался. Есть новый вопрос!
Вопрос по потоками (многопоточный демон): можно ли в с++ (если можно то как) при работе с потоками создавать глобальную переменную, доступную всем потокам.
Вопрос можно ли? Однозначна можно. Вопрос как? Тут ответ должен исходить из того что имеем(операционка, библиотеки, личные взгляды)...
Не имею практического опыта программирования под BSD, но точно что posix она должна поддерживать, как ни как it`s UNIX хоть и без бумажки),
поэтому в яндекс posix и он сам тебе предложит posix threads, ну а там 2 ссылка после wiki, https://computing.llnl.gov/tutorials/pthreads/
Кстати, не точно должна, а имеет http://www.freebsd.org/cgi/man.cgi?quer ... .1-RELEASE
Не ругайте меня за столько ссылок, это я для само образования. ;-)

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-12-08 23:27:48
SOBAN
Разрабатываю под свои нужды что то аналогичное, но столкнулся с проблемой:

Код: Выделить всё

 error: winsock2.h: No such file or directory
при компиляции, читал что путь к winsock2.h в unix отличается от win.
Как правильно указать, что бы отпустило. В интернете шлялся долго. Найти так и не удалось... или это что то с настройкой компилятора уже?
В программе пишу так:

Код: Выделить всё

#include <winsock2.h>

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-12-09 2:42:58
Fastman
Игорь писал(а):Разрабатываю под свои нужды что то аналогичное, но столкнулся с проблемой:

Код: Выделить всё

 error: winsock2.h: No such file or directory
при компиляции, читал что путь к winsock2.h в unix отличается от win.
Как правильно указать, что бы отпустило. В интернете шлялся долго. Найти так и не удалось... или это что то с настройкой компилятора уже?
В программе пишу так:

Код: Выделить всё

#include <winsock2.h>
Вы хоть платформу напишите win/lin/bsd...
а то сообщение в тягостные раздумья вгоняет...

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-12-09 3:29:30
Гость
winsock2.h
в юниксе такого файла никогда небыло и не будет
у меня смутные сомнения в вашей квалификации

Re: Сокет-cервер на с/с++ и клиент на ActionScript 2.0 XMLSo

Добавлено: 2010-12-09 10:14:25
SOBAN
Гость писал(а):в юниксе такого файла никогда небыло и не будет
у меня смутные сомнения в вашей квалификации
Это точно, там sys/socket.h, совсем башка не варит... :no: