6.9 KiB
websocket-sharp
websocket-sharp is a C# implementation of WebSocket protocol client & server.
Usage
WebSocket Client
Step 1
Required namespaces.
using WebSocketSharp;
using WebSocketSharp.Frame;
WebSocket
class exists in WebSocketSharp
namespace, WebSocket data frame resources (e.g. WsFrame
class) exist in WebSocketSharp.Frame
namespace.
Step 2
Creating instance of WebSocket
class.
using (WebSocket ws = new WebSocket("ws://example.com"))
{
...
}
WebSocket
class inherits IDisposable
interface, so you can use using
statement.
Step 3
Setting WebSocket
event handlers.
WebSocket.OnOpen event
WebSocket.OnOpen
event is emitted immediately after WebSocket connection has been established.
ws.OnOpen += (sender, e) =>
{
...
};
e
has come across as EventArgs.Empty
, so there is no operation on e
.
WebSocket.OnMessage event
WebSocket.OnMessage
event is emitted each time WebSocket data frame is received.
ws.OnMessage += (sender, e) =>
{
...
};
Type of received WebSocket data frame is stored in e.Type
(WebSocketSharp.MessageEventArgs.Type
, its type is WebSocketSharp.Frame.Opcode
), so you check it out and you determine which item you should operate.
switch (e.Type)
{
case Opcode.TEXT:
...
break;
case Opcode.BINARY:
...
break;
default:
break;
}
If e.Type
is Opcode.TEXT
, you operate e.Data
(WebSocketSharp.MessageEventArgs.Data
, its type is string
).
If e.Type
is Opcode.BINARY
, you operate e.RawData
(WebSocketSharp.MessageEventArgs.RawData
, its type is byte[]
).
WebSocket.OnError event
WebSocket.OnError
event is emitted when some error is occurred.
ws.OnError += (sender, e) =>
{
...
};
Error message is stored in e.Message
(WebSocketSharp.ErrorEventArgs.Message
, its type is string
), so you operate it.
WebSocket.OnClose event
WebSocket.OnClose
event is emitted when WebSocket connection is closed.
ws.OnClose += (sender, e) =>
{
...
};
Close status code is stored in e.Code
(WebSocketSharp.CloseEventArgs.Code
, its type is WebSocketSharp.Frame.CloseStatusCode
) and reason of close is stored in e.Reason
(WebSocketSharp.CloseEventArgs.Reason
, its type is string
), so you operate them.
Step 4
Connecting to server using WebSocket.
ws.Connect();
Step 5
Sending data.
ws.Send(data);
WebSocket.Send
method is overloaded.
data
types are string
, byte[]
and FileInfo
class.
Step 6
Closing WebSocket connection.
ws.Close(code, reason);
If you want to close WebSocket connection explicitly, you can use Close
method.
Type of code
is WebSocketSharp.Frame.CloseStatusCode
, type of reason
is string
.
WebSocket.Close
method is overloaded (In addition Close()
and Close(code)
exist).
WebSocket Server
Step 1
Required namespaces.
using WebSocketSharp;
using WebSocketSharp.Frame;
Same as WebSocket Client.
Step 2
Creating instance of WebSocketServer
class.
WebSocketServer wssv = new WebSocketServer("ws://example.com:4649");
If you set WebSocket url without port number, WebSocketServer
set 80 or 443 to port number automatically.
So it is necessary to run with root permission.
$ sudo mono example2.exe
Step 3
Setting WebSocketServer event handlers.
WebSocketServer.OnConnection event
WebSocketServer.OnConnection
event is emitted each time client makes a connection request.
wssv.OnConnection += (sender, e) =>
{
...
};
WebSocket
to communicate with client is stored in e.Socket
(WebSocketSharp.ConnectionEventArgs.Socket
, its type is WebSocketSharp.WebSocket
), so you operate it.
WebSocket ws = e.Socket;
ws.OnMessage += (sender_, e_) =>
{
...
};
Same settings of WebSocket
event handlers as WebSocket Client.
This WebSocket is server-side, so data is sent from server to client.
If you want to function as echo server that returns a data to client as it is received,
// Echo
ws.Send(e_.Data);
If you want to function as chat server that returns a data to all clients,
// Chat
wssv.Send(e_.Data);
WebSocketServer.OnError event
WebSocketServer.OnError
event is emitted when some error is occurred.
wssv.OnError += (sender, e) =>
{
...
};
Error message is stored in e.Message
(WebSocketSharp.ErrorEventArgs.Message
, its type is string
), so you operate it.
Step 4
Starting server.
wssv.Start();
Step 5
Sending data to all clients.
wssv.Send(data);
WebSocketServer.Send
method is overloaded.
data
types are string
and byte[]
.
Step 6
Stopping server.
wssv.Stop();
Examples
Examples of using websocket-sharp.
Example
Example connects to the Echo server using the WebSocket.
Example1
Example1 connects to the Audio Data delivery server using the WebSocket (Example1 is only implemented a chat feature, still unfinished).
Example2
Example2 starts WebSocket server.
Supported WebSocket Protocol
websocket-sharp supports RFC 6455.
- @branch: hybi-00 supports older draft-ietf-hybi-thewebsocketprotocol-00 (hybi-00).
- @branch: draft75 supports even more old draft-hixie-thewebsocketprotocol-75 (hixie-75).
Reference
Thx for translating to japanese.
License
Copyright © 2010 - 2012 sta.blockhead
Licensed under the MIT License.