Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Silverlight + Policy server 
:(
    Опции темы
Sartorius
Дата 19.10.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 Привет.
 Пытаюсь достучаться до TCP сервера из Silverlight контрола
Код сервера
Код

#include <stdio.h>
#include <winsock2.h>      
#include <windows.h>
#include <string.h>

#define MY_PORT     4530
#define POLICE_PORT 943   // Silverlight policy server port
       
DWORD WINAPI DoWorkToClient(LPVOID client_socket)
{
    SOCKET my_sock;
    my_sock=((SOCKET *) client_socket)[0];
    char buff[20*1024];    
    int bytes_recv = 0;

    printf("Server client acepted\n");

    while( bytes_recv =
             recv(my_sock, buff, sizeof(buff), 0) 
          && bytes_recv != SOCKET_ERROR )
    send(my_sock,&buff[0],bytes_recv,0);
    
    closesocket(my_sock);
    return 0;
}

DWORD WINAPI TcpServer(LPVOID arg)
{
    char buff[1024];
    SOCKET mysocket;
    printf("Server starting...\n");

    if (WSAStartup(0x0202,(WSADATA *)buff)) 
    {  
      printf("Error WSAStartup %d\n", WSAGetLastError());
      return -1;
    }

    if ((mysocket=socket(AF_INET,SOCK_STREAM,0))<0)
    {  
        printf("Error socket %d\n",WSAGetLastError());
        WSACleanup();    
        return -1;
    }
    
    sockaddr_in local_addr;
    local_addr.sin_family=AF_INET;
    local_addr.sin_port=htons(MY_PORT);
    local_addr.sin_addr.s_addr=0;

    if (bind(mysocket,(sockaddr *) &local_addr, sizeof(local_addr)))
    {    
        printf("Error bind %d\n",WSAGetLastError());
        closesocket(mysocket);  
        WSACleanup();
        return -1;
    }

    if (listen(mysocket, 0x100))
    {  
        printf("Error listen %d\n",WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }

    printf("Listening...");
    
    SOCKET client_socket;
    sockaddr_in client_addr;          
    int client_addr_size=sizeof(client_addr);

    while((client_socket = accept(mysocket, (sockaddr *)
        &client_addr, &client_addr_size)))
    {        
        DWORD thID;
        CreateThread(NULL,NULL,DoWorkToClient,
          &client_socket,NULL,&thID);
    }

    WSACleanup();
}


DWORD WINAPI PoliceToClient(LPVOID client_socket)
{
  static char response[] =     "<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"1024-10000\" /></cross-domain-policy>";

    SOCKET my_sock;
    int bytes_recv = 0;
    my_sock=((SOCKET *) client_socket)[0];
    char buff[20*1024];    

    printf("Policy server client acepted\n");

    ::ZeroMemory(buff, sizeof(buff));

    bytes_recv = recv(my_sock, buff, sizeof(buff), 0);

    if (bytes_recv != SOCKET_ERROR)
    {            
        printf("%s\n reveived", buff);

        send(my_sock, response, strlen(response), 0);
        printf("%s sended\n", response);

        char c = '\0';
        send(my_sock, &c, 1, 0);
    }
    
    closesocket(my_sock);

    return 0;
}

DWORD WINAPI PoliceServer(LPVOID arg)
{
    char buff[1024];
    SOCKET mysocket;
    printf("Police server starting...\n");

    if (WSAStartup(0x0202,(WSADATA *)buff)) 
    {  
      printf("Error WSAStartup %d\n", WSAGetLastError());
      return -1;
    }

    if ((mysocket=socket(AF_INET,SOCK_STREAM,0))<0)
    {  
        printf("Error socket %d\n",WSAGetLastError());
        WSACleanup();    
        return -1;
    }
    
    sockaddr_in local_addr;
    local_addr.sin_family=AF_INET;
    local_addr.sin_port=htons(POLICE_PORT);
    local_addr.sin_addr.s_addr=0;

    if (bind(mysocket,(sockaddr *) &local_addr, sizeof(local_addr)))
    {    
        printf("Error bind %d\n",WSAGetLastError());
        closesocket(mysocket);  
        WSACleanup();
        return -1;
    }

    if (listen(mysocket, 0x100))
    {  
        printf("Error listen %d\n",WSAGetLastError());
        closesocket(mysocket);
        WSACleanup();
        return -1;
    }

    printf("Listening...");
    
    SOCKET client_socket;
    sockaddr_in client_addr;          
    int client_addr_size=sizeof(client_addr);

    while((client_socket = accept(mysocket, (sockaddr *)
        &client_addr, &client_addr_size)))
    {        
        DWORD thID;
        CreateThread(NULL,NULL,PoliceToClient,
          &client_socket,NULL,&thID);
    }

    WSACleanup();
}

int main(int argc, char* argv[])
{


    DWORD thID, policyThID;

    // Main server thread
    HANDLE mainHandle = CreateThread(NULL,NULL,TcpServer,
          NULL ,NULL,&thID);

    // Policy server thread
    HANDLE policyThHandle = CreateThread(NULL,NULL,PoliceServer,
      NULL ,NULL,&policyThID);

    WaitForSingleObject(mainHandle, INFINITE);    
    
    return 0;
}


Код в контроле

Код


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            DnsEndPoint endPoint = new DnsEndPoint("127.0.0.1", 4530);
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            SocketAsyncEventArgs args = new SocketAsyncEventArgs();
            args.UserToken = sock;
            args.RemoteEndPoint = endPoint;
            args.Completed += OnSocketConnectionCompleted;
            sock.ConnectAsync(args);                                   
        }

        private void OnSocketConnectionCompleted(object sender, SocketAsyncEventArgs args)
        {            
            if (args.SocketError != SocketError.Success)
            {
                return;
            }
        }


Получаю AccessDenied в SockError постоянно. Вроде policy правильный. Что может быть не так?
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.