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);
}
}