2013-02-08 2 views
0

각 클라이언트를 등록하고 클라이언트의 모든 메시지를 다른 모든 클라이언트에 브로드 캐스팅하는 간단한 nodejs Tcp 서버가 있습니다.Silverlight 클라이언트 Node.js 서버 - 액세스 거부 오류

문제는 실버 소켓으로 연결하는 것이 었습니다. 4530 포트에서 nodejs Tcp 서버를 실행하는 공용 IP에 연결하려고하면 "액세스가 거부되었습니다"라는 오류 메시지가 나타납니다.

nodejs 코드 :

net = require('net');   
var clients = []; 
net.createServer(function (socket) {   
    socket.name = socket.remoteAddress + ":" + socket.remotePort 
    clients.push(socket);  
    socket.on('data', function (data) { 
    broadcast(data, socket); 
    });   
    socket.on('end', function() { 
    clients.splice(clients.indexOf(socket), 1); 

    }); 
    function broadcast(message, sender) { 
    clients.forEach(function (client) { 

     if (client === sender) return; 
     client.write(message); 
    }); 
    }  
}).listen(4530); 

실버 코드 :

void Connect(string IP_Address) 
{ 
    client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
    SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs() 
    { 
      RemoteEndPoint = new IPEndPoint(IPAddress.Parse(IP_Address), 4530) 
    }; 
    socketEventArg.Completed += OnConncetCompleted; 
    client_socket.ConnectAsync(socketEventArg); 
} 

void OnConncetCompleted(object sender, SocketAsyncEventArgs e) 
     { 
      if (e.SocketError == SocketError.Success) 
      { 
       this.Dispatcher.BeginInvoke(new ShowMessagedelegate(ShowMessageBox), "Connceted Successfully!"); 
       this.Dispatcher.BeginInvoke(new Enabledelegate(EnableControl), true); 

      } 
      else 
      { 
       this.Dispatcher.BeginInvoke(new ShowMessagedelegate(ShowMessageBox), e.SocketError.ToString()); 
       this.Dispatcher.BeginInvoke(new Enabledelegate(EnableControl), false); 
      } 

     } 

답변

0

아마, 당신은 nodejs의 TCP 서버의 루트에 clientaccesspolicy.xml 파일이 없습니다. 더 읽기 : http://msdn.microsoft.com/ru-ru/library/cc645032(v=vs.95).aspx

정책 파일의 예 :

<?xml version="1.0" encoding ="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from> 
     <domain uri="file:///" /> 
     </allow-from> 
     <grant-to> 
     <socket-resource port="4530" protocol="tcp" /> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 
관련 문제