2012-03-14 53 views
11

Estoy creando una aplicación que necesita comunicación WebSocket. Todo lo que necesito es un simple WebSocketServer con posibilidades de subprocesamiento. Descubrí que SuperWebSocket puede satisfacer mis necesidades. Pero, mi poca familiaridad con C# crea problemas para comprender el código. ¿Alguien puede mostrarme cómo crear un servidor simple que debe repetir el mensaje que se envía desde el navegador/página web. Estaré muy agradecido con la persona que muestre una buena dirección || guide || code. No pude descifrar el uso de sus códigos de muestra.Cómo crear un servidor WebSocket usando SuperWebSocket

EDITAR: Esto es lo que quiero lograr. enter image description here

Si alguien dice una solución exacta, la adoptaré.

EDITAR: "Robar" ya dio la respuesta directa. Esto es exactamente como lo usé.

this.NewSessionConnected += new SessionEventHandler<WebSocketSession>(this.WebSocketServer_NewSessionConnected); 

this.NewDataReceived += new SessionEventHandler<WebSocketSession, byte[]>(this.WebSocketServer_NewDataReceived); 

this.NewMessageReceived += new SessionEventHandler<WebSocketSession, string>(this.WebSocketServer_NewMessageReceived); 

this.SessionClosed += new SessionEventHandler<WebSocketSession, SuperSocket.SocketBase.CloseReason>(this.WebSocketServer_SessionClosed); 
+0

Solo quería decir que el superwebsocket ya está multiproceso. Una sesión es independiente de otra sesión. – Rushino

Respuesta

0
class Program 
{ 
    static void Main(string[] args) 
    { 
     var listener = new TcpListener(IPAddress.Loopback, 8181); 
     listener.Start(); 
     using (var client = listener.AcceptTcpClient()) 
     using (var stream = client.GetStream()) 
     using (var reader = new StreamReader(stream)) 
     using (var writer = new StreamWriter(stream)) 
     { 
      writer.WriteLine("HTTP/1.1 101 Web Socket Protocol Handshake"); 
      writer.WriteLine("Upgrade: WebSocket"); 
      writer.WriteLine("Connection: Upgrade"); 
      writer.WriteLine("WebSocket-Origin: http://localhost:8080"); 
      writer.WriteLine("WebSocket-Location: ws://localhost:8181/websession"); 
      writer.WriteLine(""); 
     } 
     listener.Stop(); 
    } 
} 
+0

Err, eso es un apretón de manos incompleto sin un eco posterior de las solicitudes de los clientes. ¿Tienes más código para publicar? – simonc

+0

@tuoxie Su solución funcionó bien. Pero, no funcionó cuando eliminé ese "uso" y declare el "escritor" como un objeto. ¿Puedo saber por qué? – prabhakaran

+0

@simonc La parte restante es calcular la cadena sha1-base64 y enviarla al cliente. – prabhakaran

3

SuperWebSocket

Tutorial para Echo example

Alchemy

Si usted está abierto a otro servidor WebSocket # C se puede utilizar Alchemy. La implementación del servidor es bastante sencillo:

static void Main(string[] args) { 
    var aServer = new WSServer(8100, IPAddress.Any) { 
     DefaultOnReceive = new OnEventDelegate(OnReceive), 
     DefaultOnSend = new OnEventDelegate(OnSend), 
     DefaultOnConnect = new OnEventDelegate(OnConnect), 
     DefaultOnConnected = new OnEventDelegate(OnConnected), 
     DefaultOnDisconnect = new OnEventDelegate(OnDisconnect), 
     TimeOut = new TimeSpan(0, 5, 0) 
    }; 

    aServer.Start(); 
} 

static void OnConnected(UserContext aContext) { 
    Console.WriteLine("Client Connection From : " + aContext.ClientAddress.ToString()); 
    // TODO: send data back 
} 

Como se ha mencionado en su página web, tienen un simple chat example.

+0

¡La alquimia es genial! desafortunadamente, carece de algunas características en este momento. SuperWebSockets es probablemente una mejor opción por ahora. – Rushino

+0

@Rushino: eso es correcto. SuperWebSockets es actualmente la solución perfecta para los proyectos en nuestra compañía. – Robar

+1

¡Que agradable de escuchar! Acabo de empezar a usarlo y creo que es realmente maravilloso cómo funciona y funciona muy bien hasta ahora. Entonces, si lo usa en su compañía, eso prueba mi punto. – Rushino

Cuestiones relacionadas