NOTE: Beta2 has now been released which supersedes beta1, please see the updated article here.
We happily announce the next major (beta1) release of our network library. It represents significant steps forward in features, flexibility and extensibility. NetworkComms.Net 3.0.0 will introduce the following new features:
- Bluetooth connections (only for .net 3.5 upwards, excluding Windows Phone 8 and WinRT).
- Unmanaged connections – Interface with other network libraries, embedded controllers, legacy hardware devices, etc.
- Support for WinRT (Not yet complete in the current beta1) – Use NetworkComms.Net in your windows store applications.
- Peer discovery – Easily discover NetworkComms.Net peers in the local network.
- SSL connections – Introduces asymmetric encryption (not yet available on Windows Phone 8 and WinRT).
- Other security features:
- Ability to restrict incoming IP ranges based on CIDR matches.
- Automatically pad encrypted data preventing traffic analysis side channel attacks.
- Nested packets that allow headers to be encrypted.
- DOS protection which can ban remote clients based on set criteria, such as malformed data.
- Strong named assemblies.
- All features are now granular allowing configuration at the global, connection or listener specific level.
- Several minor usage and performance improvements.
The beta1 is nearly feature complete but the following tasks are yet to be completed before final release:
- WinRT platform support.
- TCP implementation for local peer discovery.
- Removal of Protobuf as the default serializer – Although you will still be able to use Protobuf removing it from the core library, as a default, allows us to make several optimisations.
- Full code review and testing.
- Finalisation of XML documentation. The download does contain the most recent version 3.0.0 (beta1) documentation.
- Website will be updated alongside the final release of version 3.0.0, this includes all articles, tutorials, online documentation etc.
Features that did not make the cut for version 3.0.0 but are on the horizon for a future release include (if you would like us to consider any not in this list please let us know on our forums):
- Builds for Xamarin platforms, i.e. iOS and Android.
- SSL and Bluetooth connection support on Windows Phone 8 and WinRT.
- MessagePack serializer extension.
Version 3.0.0 introduces a number of API changes and we recommend you familiarise yourself with these, using the included examples, before updating your own applications if you are upgrading from version 2.x. The changes are summarised as follows:
- Listening for incoming connections has been redesigned from the ground up. All listening now happens at the base connection layer. e.g. TCPConnection.StartListening() is now Connection.StartListening(). A quick glance at the included examples should highlight these changes.
- Name spaces have been made more granular. A large number of classes which were previously in the DPSBase or NetworkCommsDotNet namespace have moved to NetworkCommsDotNet.DPSBase, NetworkCommsDotNet.Tools, NetworkCommsDotNet.Connections, NetworkCommsDotNet.Connections.TCP etc.
- All IP related features, previously in the static NetworkComms class, have moved to either the static IPTools or HostInfo classes.
- Connections and ConnectionInfo objects now take EndPoint rather than IPEndPoint where any type conversion needs to be done in code based on the type of connection being handled.
- Send receive methods require the sending object type.
- The concept of a default port has been removed. Either a random port can be selected automatically or a specific port must be provided programmatically. This removes potential confusion about the port actually used when listening.
- TCPConnection and UDPConnection inherit from both Connection and IPConnection classes.
NetworkComms.Net 3.0.0 includes a large number of tools which can be used to simplify adding network related functionality to your own application:
- Adler32 – Implementation of the Adler32 checksum algorithm. It is not as reliable as an MD5 checksum but is about an order of magnitude faster to calculate.
- MD5 – Managed implementation of the MD5 checksum alogrithm.
- CommsMath – A simple maths package.
- CommsThreadPool – A, high performance, priority based thread pool. An instance of this class is used by NetworkComms.Net to handle incoming packets. See NetworkComms.CommsThreadPool.
- DOSProtection – A DOS protection class. See IPConnection.DOSProtection.
- HostInfo – Provides information about the local host. Also see HostInfo.IP and HostInfo.BT for IP and Bluetooth information respectively.
- IPTools – Collection of tools for dealing with IP addresses.
- LogTools – Quickly log exceptions and information to a file.
- PacketBuilder – Provides features used to easily concatenate fragmented network data.
- PeerDiscovery – Provides features used to discover local network peers.
- PriorityQueue – A queue which contains features to add and remove items using a simple priority model.
- ShortGUID – Shortform globally unique identifier GUID which is easier to handle than Guid.NewGuid().
- SSLTools – Tools for easily creating self-signed certificates programmatically.
- StreamTools – Provides several tools and extensions to Streams. Also see ThreadSafeStream and StreamSendWrapper.
- XPlatformHelper – Adds functionality missing from standard WinRT framework such as IPAddress, IPEndPoint etc.
Please report any bugs using our issue tracker here.
Questions and Feedback
We welcome any questions or feedback on this beta1 release, preferably via our forums, here.
NetworkComms.Net v3.0.0 (beta1) is made available only under GPLv3. Commercial licenses will be available alongside the final release.
Please see the blog post for the more recent beta2 release, here.