Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


A static IP, based proxy server and client to allow different platforms to communciate to each other. Designed for CPSC 581 students at the University of Calgary, the kit allows students to quickly combine different plaforms and devices together for prototyping.

Originally developed by: David Ledo & Brennan Jones

The predecessor to the Original NetworkIt was iNetwork by Sebastian Boring

For Students

Download the latest release for your project and import. There are instructions on how to import in each platform release. There is also a demo program in each platform that shows how to use the API on the platform

Current supported platforms:

  • Windows WPF
  • Java 7+ (including Processing 3)
  • Windows 8 & 8.1 Phones
  • Unity (Windows, Mac, Linux), (Android)
  • Python 2.7 (Raspberry Pi Compatiable)
  • Arduino (with node.js v7.5.0)
  • Android w/Android Studio

Using the Library

The code below is to demonstrate how most of the library has been written. It is meant to make it easy to connect and start developing a protocol as quick as possible. The code pattern is generally the same for all platforms support but on an even higher level abstraction that requires little understanding of how works.

1. Connecting

First create a Client object by specifying a "secret" username, server URL, and port number (default=8000). Then setup the appropriate events that you want to watch for. Often you will only need to use the Connect and Message events.

Client client = new Client("username", "http://localhost", 8000);
client.MessageReceived += Client_MessageReceived;
client.Connected += Client_Connected;

private void Client_Connected(object sender, EventArgs e)
    WriteLogLine("Connection Successful");

private void Client_MessageReceived(object sender, NetworkItMessageEventArgs e)

2. Sending a Message

To send a message through the API, create a Message object, and some fields, and send it along via your client object. You can optionally set the DeliverToSelf option which sends you a copy of your own message.

Message m = new Message("Poke!");
m.DeliverToSelf = false;
m.AddField("num1", 3);
m.AddField("num2", 4);
m.AddField("count", messageCount++);


3. Recieving a Message

When you recieve a message, you will get a Message object back. Here you can find your additional fields and parse them back into their original types.

private void Client_MessageReceived(object sender, NetworkItMessageEventArgs e)
    Message m = e.ReceivedMessage;
    if (m.subject.equals("Poke!"))
        int power = 0;
        int.TryParse(m.GetField("count"), out power);

Hosting your own instance

If you wish to run your see Hosting your own instance below. Basically run the NodeServer on your own machine and use localhost as the URL. This is useful for personal servers for when the instructor's server isn't running anymore.

If you wish to run a server for students, request a static IP and server hosting from your IT department. You may also wish to add a Domain Name so it is easier for students to access the server.

Installation: Install (v1.7.3) with commands (or otherwise use the included node_modules):

npm install
npm install dateformat@3.0.2

Run with

node server.js


Refer to the WPF version which defines the protocol. Use the latest version to structure how the library should operate when porting to other platforms. Prioritize building quick connect and easy to use object serialization through JSON.


Credit to the following Githubbers who helped improve/develop the library:

  • (your name here)