This is a step-by-step guide about how to expose live data from a C# console application to a web browser using WebSockets. The example has been implemented and tested on Windows7.
NodeJs and Socket.IO installation
- Install node.js - http://nodejs.org/
- Install socket.io windows package - http://code.google.com/p/nodejs-win/downloads/list (attenzione a prendere la versione corretta compatibile con nodejs)
- Add to you Windows PATH nodejs directory- ;C:\Program Files\NodeJS
- Launch windows console (cmd) and then node application typing node, you should see the node prompt
1
2
| C:\Users\roggero>node> |
to exit CTRL+C (twice)
Source Code
- ws.js is the WebSocket Gateway and UDP server written in NodeJs
- index.html, served by ws.js, visualizes the data
- desktop.cs is the C# Console Application (Visual Studio 2010) that writes the data to UDP (a counter updated each 50ms)
- Source code can be downloaded here -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| //websocket gateway on 8070var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs');var mysocket = 0;app.listen(8070);function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); });}io.sockets.on('connection', function (socket) { console.log('index.html connected'); mysocket = socket;});//udp server on 41181var dgram = require("dgram");var server = dgram.createSocket("udp4");server.on("message", function (msg, rinfo) { console.log("msg: " + msg); if (mysocket != 0) { mysocket.emit('field', "" + msg); mysocket.broadcast.emit('field', "" + msg); }});server.on("listening", function () { var address = server.address(); console.log("udp server listening " + address.address + ":" + address.port);});server.bind(41181); |
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <html><head><script src="/socket.io/socket.io.js"></script></head><body><script> socket.on('field', function (data) { console.log(data); $("#field").html(data); });</script> Data: <div id="field"></div></body></html> |
Desktop.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;using System.Threading;namespace desktop{ class Desktop { // TODO: check all errors static void Main(string[] args) { Int32 counter = 0; while (true) { SendUDP("127.0.0.1", 41181, counter.ToString(), counter.ToString().Length); Thread.Sleep(50); counter++; } } public static void SendUDP(string hostNameOrAddress, int destinationPort, string data, int count) { IPAddress destination = Dns.GetHostAddresses(hostNameOrAddress)[0]; IPEndPoint endPoint = new IPEndPoint(destination, destinationPort); byte[] buffer = Encoding.ASCII.GetBytes(data); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); for (int i = 0; i < count; i++) { socket.SendTo(buffer, endPoint); } socket.Close(); System.Console.WriteLine("Sent: " + data); } }} |
Run the demo
To run this demo:
- Execute from cmd prompt: node ws.js
- Execute desktop.exe application
- Navigate with your modern web browser to http://localhost:8070
1
2
3
| c:\Users\roggero\Desktop>node ws.j info - socket.io startedudp server listening 0.0.0.0:41181 |
That’s all!
No comments:
Post a Comment