|
|
|
|||||
Сервер для Flash на C++ (socket)
Как на с++ сделать сервер, документации, или чтото. И как его седенить?
Да я порылся в интренете нашол кучу всякого, вот к примеру server Ruby: http://haxe.ru/node/134 никогда не слышал об таком языке программирования Начитался что после С++ надо какуюто платформу что такое платформа ? Нашол какуюто ссылку плотформу ACE . Та даже самый просто php чат как сделать? у меня есть прекрасный исходник пхп чата флеш+пхп , я взял шаровый пхп хостинг, ну и всеровно, чат никак не могу запустить. Дальше: Простейшая передача числа из клиента к серверу (тоесть у примеру с сайта на сервер у меня на компьютере ip: port). Как такое сделать? как сделать чтобы к примеру записалось число в xml файл и это число сразу отобразилось у другой флешки. Короче словом, как сделать сервер для потокового приема и отдачи хотябы чисел. Можно самый примитивный, или исходник какойто. Помогите розобратся в этой мурне ) |
|
|||||
listener
|
От всей души вкладываю примитивный исходник, рабочий, проверял в связке с флэшем:
#include <iostream> using namespace std; #include <winsock2.h> #pragma comment (lib, "ws2_32.lib") #pragma comment (lib, "mswsock.lib") void main(void) { char PCName [30], ClientName[30], Message[200]; WSAData WSADat; // Свойства WinSock (результат функции WSAStartup) sockaddr_in sin; // Свойства(адрес) создаваемого сокета SOCKET Sock, Client; // Серверный и клиентский сокеты WSAStartup(0x0202,&WSADat); // Инициализация WinSock // 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2 // WSADat - структура, куда будут занесены рез. инициализации gethostname(PCName, 30); // Получение имени текущего ПК sin.sin_family = AF_INET; // Тип адреса sin.sin_addr.s_addr = 0; // IP-адрес сервера (пори создании сервера можно 0) sin.sin_port = htons(2803); // Номер порта сервера Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Создание сокета bind(Sock, (sockaddr*)&sin, sizeof(sin)); // Связывание созданного сокета с адресом sin // ***** Ожиданеи клиента cout << "Wait of client..." << endl; listen(Sock, SOMAXCONN); // Прослушивание сокета сервером (для подключения клиента) Client = accept(Sock, (sockaddr*)&sin, 0); // Ожидание клиента recv(Client, ClientName, 30, 0); // Получение имени компьютера клиента send(Client, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (сервера) cout << "Client ( " << ClientName << " ) has connected!" << endl; // ***** Меню int Menu; do { cout << "1. Send message;" << endl; cout << "2. Get Message;" << endl; cout << "3. Quit;" << endl; cout << "Make your selection: "; cin >> Menu; switch (Menu) { case 1: // Отправка сообщения клиенту cout << "Enter message: "; cin.get(); cin.getline(Message, 200); if (send(Client, Message, strlen(Message) + 1, 0) != SOCKET_ERROR) cout << "Sent!\n"; else cout << "Error of sending!\n"; break; case 2: // Приём сообщения от клиента if (recv(Client, Message, 200, 0) != SOCKET_ERROR) { cout << Message << endl; cin.get(); } else cout << "Error of getting!\n"; break; }; cout << endl; } while (Menu != 3); // Закрытие сокетов и окончание работы с WinSock closesocket(Sock); closesocket(Client); WSACleanup(); } Да, хорошо бы подковаться малость, а то опять тема получится никакая. Последний раз редактировалось alexcon314; 29.12.2009 в 18:17. |
|
|||||
alexcon314
Полегчало =) но ещё интересует как подконектить к нему флешку ??? |
|
|||||
listener
|
Ну, как подконнектить... так вот, примерно:
// AS 2.0 socket client code var socket:XMLSocket = new XMLSocket(); socket.onConnect = function(success:Boolean) { if (success) { o("Connection succeeded!"); socket.send("ogogo"); } else { o("Connection failed!"); } }; if (!socket.connect("127.0.0.1", 2803)) { o("Connection failed!"); } socket.onClose = function(){ o("Connection closed."); } socket.onData = function(src) { o(src); }; sendBtn.onRelease = function() { socket.send(toSend.text); }; function o(msg) { out.text = msg + newline + out.text; } |
|
|||||
Регистрация: Aug 2010
Сообщений: 9
|
Цитата:
|
|
|||||
Регистрация: Jan 2010
Сообщений: 41
|
Спасибо все классно все работает только есть 2 вопроса
1) при компиляции в swf и при запуске этого swf плеер сообщает что производится попытка небезпасной операции (как это убрать чтобы не у меня ни у остальных клиентов этой ошибки не было) 2) Сокет позволяет только 1 соединение? просто если запускать 2 клиента то 1 не работает, или это зависит от самого сокет сервера? =) Заранее спс за ответы |
|
|||||
listener
|
1. Это нормально. Так работает система безопасности плеера. Разберитесь с ней.
2. Исходник примитивный. Это просто иллюстрация, демонстрирующая некоторые базовые принципы. Если хочется что-то получше, ну... я не знаю. В сети полно исходников и компонент для сборки сервера. Вы сделали первый шаг, так не останавливайтесь. |
|
|||||
Регистрация: Jan 2010
Сообщений: 41
|
ММ а подскажите пожалуйста каким образом с ней можно разобраться =) и так чтоб не только у себя =) и кстати ошибку такую выдает только если свфку запускаешь а когда на веб сервер выкладываешь так сразу коннект еррор но ошибки той нету
|
|
|||||
Регистрация: Jan 2010
Сообщений: 41
|
Сижу весь день ломаю голову как сделать "многопользовательский сервер" ничего пока не вышло
Я еще вычитал что надо делать 2 сокетами 1 соединяет 2 меняет данные Если не сложно может накините какой-нибудь примерчик И вобще как образом осуществить весь процесс этого онлайна, где копать, что необходимо. Цель у меня такая: -Есть база Mysql в ней допустим [login, pass, lvl, exp, hp] -Есть сайт PHP в нем все бонально просто [авторизация, после логина доступ к игре, от туда мы выхвавтыаем $_SESSION['login'] пихаем во flash дальше из Flash'a посылаем запрос на сокет сервер [login] ] -Сокет сервер [берет этот [login] и на основании его делает запрос в базу откуда выхватывает всю строку и посылает обратно ] -Flash уже действует дальше на основании этих данных Вроде все понятно (сама структура) поправьте меня если все происходит не так Половиу из этого я знаю как реализовать половину нет -Каким образом принятые данные из сокет сервера можно преобразовать в переменные и чтобы во флеше все выстроилось как надо -Как сделат так чтобы при обращении к сокет серверу происходило какбы потоковое действие и не надо было ждать пока 1 пользователь закончит общаться с сокетами -и вот самого главного я не пойму каким эт образом можно различить юзеров, да даже бонально крестики нолики как свф поймет когда ходит юзер1 а когда юзер2 =) БОЛЬШАЯ просьба если кому не трудно, кто сталкивался или просто знает, дайте плз совет, ссылку, пример, все что угодно! Огромный поклон, Спасибо! Последний раз редактировалось stinkybob; 16.01.2010 в 00:00. |
Часовой пояс GMT +4, время: 09:17. |
|
« Предыдущая тема | Следующая тема » |
|
|