mozilla

Revision 352755 of Writing a WebSocket server in C#

  • Revision slug: WebSockets/Writing_WebSocket_server
  • Revision title: Writing WebSocket server
  • Revision id: 352755
  • Created:
  • Creator: lumia
  • Is current revision? No
  • Comment

Revision Content

Introduction

If you would like to use the WebSocket API, it is useful if you have a server. :-) In this article I will show you how to write one in C#.

In lots of server side programming language you can do it, but to keep things simple and more understandable, I chose Microsoft's language.

This server gives which is required by RFC 6455 so it will only handle connections from Chrome version 16, Firefox 11, IE 10 and over.

First steps

WebSocket is communicating over a TCP (Transmission Control Protocol) connection, luckily C# has a TcpListener class which name tells everything. It is in System.Net.Sockets namespace.

It is a good idea to use using keyword to write less. It means you have not to retype the name of namespace if you use classes from it.

TcpListener

Constructor:

TcpListener(System.Net.IPAddress localaddr, int port)

You set here, where the server will be reachable.

To easily give the expected type to first parameter use the Parse static method of IPAddress.

Methods:

  • Start()
  • TcpClient AcceptTcpClient()
    Waiting for a connection and if it is over TCP, accepts it and returns it as a TcpClient object.

Let us use up what we have learnt.

​using System.Net.Sockets;
using System.Net;
using System;

class Server {
    public static void Main() {
        TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);

        server.Start();
        Console.WriteLine("Server has started on 127.0.0.1:80.{0}Waiting for a connection...", Environment.NewLine);

        TcpClient client = server.AcceptTcpClient();

        Console.Write("A client connected.");
    }
}

Revision Source

<h2 id="Introduction">Introduction</h2>
<p>If you would like to use the WebSocket API, it is useful if you have a server. :-) In this article I will show you how to write one in C#.</p>
<div class="note">
  <p>In lots of server side programming language you can do it, but to keep things simple and more understandable, I chose Microsoft's language.</p>
</div>
<p>This server gives which is required by <a href="http://tools.ietf.org/html/rfc6455" title="http://tools.ietf.org/html/rfc6455">RFC 6455</a> so it will only handle connections from Chrome version 16, Firefox 11, IE 10 and over.</p>
<h2 id=".C2.A0">First steps</h2>
<p>WebSocket is communicating over a <a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol" title="http://en.wikipedia.org/wiki/Transmission_Control_Protocol">TCP (Transmission Control Protocol)</a>&nbsp;connection, luckily C# has a <a href="http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx" title="http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx">TcpListener</a> class which name tells everything. It is in <em>System.Net.Sockets</em> namespace.</p>
<div class="note">
  <p><span style="line-height: 1.572;">It is a good idea to use </span><em style="line-height: 1.572;"><span style="line-height: 1.572;">u</span><span style="line-height: 1.572;">sing</span></em><span style="line-height: 1.572;"> keyword to write less. It means you have not to retype the name of namespace if you use classes from it.</span></p>
</div>
<h3>TcpListener</h3>
<p>Constructor:</p>
<pre>
TcpListener(System.Net.<a href="http://msdn.microsoft.com/en-us/library/system.net.ipaddress.aspx">IPAddress</a> localaddr, int port)</pre>
<p>You set here, where the server will be reachable.</p>
<div class="note">
  <p><span style="line-height: 1.572;">To easily give the expected type to first parameter use the&nbsp;</span><em style="line-height: 1.572;">Parse</em><span style="line-height: 1.572;">&nbsp;static method of&nbsp;</span><em style="line-height: 1.572;">IPAddress.</em></p>
</div>
<p><span style="line-height: 1.572;">Methods</span><span style="line-height: 1.572;">:</span></p>
<ul>
  <li><span style="line-height: 1.572;">Start()</span></li>
  <li><span style="line-height: 1.572;"><a href="http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx" title="http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx">TcpClient</a> AcceptTcpClient()<br />
    Waiting for a connection and if it is over TCP, accepts it and returns it as a TcpClient object.</span></li>
</ul>
<p><span style="line-height: 1.572;">Let us use up what we have learnt.</span></p>
<pre>
<span style="line-height: 1.572;">​using System.Net.Sockets;
using System.Net;
using System;

class Server {
    public static void Main() {
        TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);

        server.Start();
        Console.WriteLine("Server has started on 127.0.0.1:80.{0}Waiting for a connection...", Environment.NewLine);

        TcpClient client = server.AcceptTcpClient();

        </span><span style="line-height: 1.572;">Console.Write("A client connected.");
</span><span style="line-height: 1.572;">    }
}</span></pre>
Revert to this revision