2012-03-14 3 views
11

WebSocket 통신이 필요한 응용 프로그램을 만들고 있습니다. 필요한 것은 스레딩 가능성이있는 간단한 WebSocketServer뿐입니다. 나는 SuperWebSocket이 나의 요구를 만족시킬 수 있음을 발견했다. 하지만 C#에 익숙하지 않은 사람은 코드를 이해하는 데 어려움을 겪습니다. 아무도 나를 보여줄 수있는 간단한 서버를 만드는 방법 브라우저/웹 페이지에서 보낸 메시지를 에코해야합니다. 좋은 지침을 제시하는 사람에게 매우 감사 할 것입니다. 나는 그들의 샘플 코드에서 사용법을 이해할 수 없었다.SuperWebSocket을 사용하여 WebSocket 서버를 만드는 방법

편집 : 이것은 달성하고자하는 것입니다. enter image description here

아무도 정확한 해결책을 말하면, 나는 그것을 채택 할 것입니다.

편집 : "Robar"는 이미 직접 응답을주었습니다. 이것은 내가 사용하는 방법입니다.

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

superwebsocket이 이미 다중 스레드라고 명시하고 싶습니다. 세션은 다른 세션과 독립적입니다. – Rushino

답변

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

오류, 클라이언트 요청이 나중에 울리지 않는 불완전한 악수입니다. 게시 할 코드가 더 많습니까? – simonc

+0

@tuoxie 귀하의 솔루션은 효과가있었습니다. 하지만, "사용"을 제거하고 "작가"를 객체로 선언하면 작동하지 않습니다. 왜 그런지 알 수 있습니까? – prabhakaran

+0

@imonc Te 나머지 부분은 sha1-base64 문자열을 계산하여 클라이언트에게 보냅니다. – prabhakaran

3

SuperWebSocket 당신이 Alchemy를 사용할 수있는 다른 C#의 웹 소켓 서버에 열려 있으면 Echo example

연금술

에 대한

튜토리얼. 서버 구현은 매우 정직 :

자신의 웹 사이트에 언급 한 바와 같이
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 
} 

, 그들은 간단한 chat example 있습니다.

+0

연금술은 정말 멋지다! 불행히도 지금은 몇 가지 기능이 부족합니다. 이제는 SuperWebSockets가 더 나은 선택 일 것입니다. – Rushino

+0

@ 루시노 : 맞습니다. SuperWebSockets은 현재 우리 회사의 프로젝트를위한 완벽한 솔루션입니다. – Robar

+1

듣기 좋네요! 나는 그것을 사용하기 시작했고, 그것이 얼마나 효과적이며 그것이 지금까지 잘 작동하고 있다고 생각합니다. 그래서 당신이 내 관점을 증명하는 당신의 회사에서 그것을 사용한다면. – Rushino

관련 문제