Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2008, 18:57
Venya2007 вне форума Посмотреть профиль Отправить личное сообщение для Venya2007 Найти все сообщения от Venya2007
  № 11  
Ответить с цитированием
Venya2007
[+4 16.07.08]

Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
__etc вот сделал, так как вы посоветовали и заработало большое вам спасибо

Старый 22.05.2011, 13:07
Stromberg вне форума Посмотреть профиль Отправить личное сообщение для Stromberg Найти все сообщения от Stromberg
  № 12  
Ответить с цитированием
Stromberg

Регистрация: May 2011
Адрес: Харьков. Украина.
Сообщений: 3
Если бы сутки не убил - не написал бы.
Ошибка и проблема очень схожа с предыдущем писателем.

Флеш лежит на test1.ru
Там же в корне идентичный(как выше писали) кросдомен со звездочками "*".
swf сокетом подключается к test1.ru но находит ошибку 2048.
Весь код я переписал отсюда чтобы по горячим следам.
Что нужно сделать? Почему выдает ошибку если уже все переписано с рабочих вариантов?

Старый 22.05.2011, 17:11
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 13  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Stromberg, если вы подключаетесь сокетом к серверу, недостаточно просто положить crossdomain.xml в корень сайта. Собственно, это не обязательно. Его должен отдавать написанный вами сервер. Или через 843 порт, или через основной порт подключения. Вот хелп. Где-то, к сожалению не помню где, узнал о дополнительном параметре тега <allow-access-from> - meta-policy. Его наличие позволяет указывать подключающейся флешке, где следует искать файл политики. Вот пример crossdomain.xml, отдаваемый по 843 порту:
Код:
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="*" meta-policy="master-only"/>
</cross-domain-policy>
В данном случае флешка удовлетвориться одним только этим файлом политики. И не будет стучаться на прочие порты. А вот, к примеру, сервер политики на C++. Я не являюсь гуру C++, поэтому код может быть в чем-то крив.
Код:
#define WIN

#include <iostream>
#include <fstream>
#ifdef WIN
    #include <winsock2.h>
    #include <windows.h>
    #pragma comment(lib, "Ws2_32.lib")
#else
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
#endif
using namespace std;

int main()
{
    // Выясняем размер файла crossdomain.xml
    int size;
    ifstream cross;
    cross.open("crossdomain.xml", ios::in | ios::binary | ios::ate);
    size = cross.tellg();
    
    // Считываем его.
    char * crossdomain = new char[size + 1];
    cross.seekg(0, ios::beg);
    cross.read(crossdomain, size);
    crossdomain[size] = 0;
    
#ifdef WIN
    // Initialize Winsock.
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        cout << "WSAStartup failed with error: " << iResult << endl;
        return 1;
    }
    
    SOCKET ListenSocket;
    ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr("192.168.34.36");
    service.sin_port = htons(843);
    
    if (bind(ListenSocket, (SOCKADDR *) & service, sizeof (service)) == SOCKET_ERROR) {
        wprintf(L"bind failed with error: %ld\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
 
    if (listen(ListenSocket, 128) == SOCKET_ERROR) {
        wprintf(L"listen failed with error: %ld\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    
    SOCKET AcceptSocket;
    sockaddr_in clientSockaddr;
    int clientSockaddrLen = sizeof(clientSockaddr);
#else
    // Создаем и настраиваем серверный сокет
    int serverFd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serverAddr.sin_port = htons(843);
    bind(serverFd, (struct sockaddr*) &serverAddr, sizeof(serverAddr));
    listen(serverFd, 128);
    
    // Переменные клиентского сокета
    int clientFd;
    struct sockaddr_in clientAddr;
    socklen_t clientAddrLen;
#endif
    
    char requestBuffer[23];
    cout << "Security server started." << endl;
    
    for (;;)
    {
#ifdef WIN
        AcceptSocket = accept(ListenSocket, (SOCKADDR *)&clientSockaddr, &clientSockaddrLen);
        recv(AcceptSocket, requestBuffer, 23, 0);
        send(AcceptSocket, crossdomain, size + 1, 0);
        cout << "Crossdomain sended to: " << inet_ntoa(clientSockaddr.sin_addr) << ":" << ntohs(clientSockaddr.sin_port) << endl;
        closesocket(AcceptSocket);
#else
        clientFd = accept(serverFd, (struct sockaddr*) &clientAddr, &clientAddrLen);
        read(clientFd, requestBuffer, 23);
        write(clientFd, crossdomain, size + 1);
        cout << "Crossdomain sended to: " << inet_ntoa(clientAddr.sin_addr) << ":" << ntohs(clientAddr.sin_port) << endl;
        close(clientFd);
#endif
    }
    
#ifdef WIN
    closesocket(ListenSocket);
    WSACleanup();
#else
    close(serverFd);
#endif
    
    return 0;
}


Последний раз редактировалось bav; 22.05.2011 в 20:38. Причина: Косметическая правка кода.
Старый 23.05.2011, 00:30
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 14  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
crossdomain.xml не регулирует политики soсket. Отдавайте разрешения по 843 или по целевому порту.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 25.05.2011, 14:17
Stromberg вне форума Посмотреть профиль Отправить личное сообщение для Stromberg Найти все сообщения от Stromberg
  № 15  
Ответить с цитированием
Stromberg

Регистрация: May 2011
Адрес: Харьков. Украина.
Сообщений: 3
http://fragarena.ru:843/ - есть сервер.
Который вроде отдает crossdomain
порты во флеше указаны верно, учел так же что http://fragarena.ru:843 и fragarena.ru:843 - разные вещи.
ошибка осталась...

Старый 25.05.2011, 22:31
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 16  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Как же так может быть, что на одном порту веб-сервер и сокет-сервер?

Цитата:
The request for a policy file is very simple: Flash Player sends the string <policy-file-request/> followed by a NULL byte to the port where it is requesting a policy file; no more, no less.
Отсюда
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 00:01.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.