![]() |
|
||||||||||
|
|||||
|
[+4 16.07.08]
Регистрация: Jul 2008
Адрес: Gamburg
Сообщений: 108
|
__etc вот сделал, так как вы посоветовали и заработало
большое вам спасибо![]() |
|
|||||
|
Регистрация: May 2011
Адрес: Харьков. Украина.
Сообщений: 3
|
Если бы сутки не убил - не написал бы.
Ошибка и проблема очень схожа с предыдущем писателем. Флеш лежит на test1.ru Там же в корне идентичный(как выше писали) кросдомен со звездочками "*". swf сокетом подключается к test1.ru но находит ошибку 2048. Весь код я переписал отсюда чтобы по горячим следам. Что нужно сделать? Почему выдает ошибку если уже все переписано с рабочих вариантов? |
|
|||||
|
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>
#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. Причина: Косметическая правка кода. |
|
|||||
|
Регистрация: May 2011
Адрес: Харьков. Украина.
Сообщений: 3
|
http://fragarena.ru:843/ - есть сервер.
Который вроде отдает crossdomain порты во флеше указаны верно, учел так же что http://fragarena.ru:843 и fragarena.ru:843 - разные вещи. ошибка осталась... |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:01. |
|
|
« Предыдущая тема | Следующая тема » |
|
|