We happily announce the next major release of our network library. It represents significant steps forward in features, flexibility and extensibility. NetworkComms.Net 3.0.0 introduces 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 – 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).
- Significantly improved support for Remote Procedure Calls (RPC), including remote events.
- 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.
- Generalised logging interface.
- All features are now granular allowing configuration at the global, connection or listener specific level.
- Protobuf serializer moved in to extension. Allows for more generalised serializer support.
- Explicit serializer interface can now be used to achieve maximum serialization/deserialization throughput.
- Large number of tools which can be used to simplify adding network related functionality to your applications.
- Many performance improvements throughout.
- Significant API changes. See updated examples in the download bundles before upgrading from v2.x.
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):
- SSL and Bluetooth connection support on Windows Phone 8 and WinRT.
- MessagePack serializer extension.
- UPnP
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.
- NetworkComms.Net no longer has a required Protobuf dependency. This allows for greater flexibility choosing your own data serializer. Should you still want to use Protobuf however it is still available as an extension.
- Send receive methods require the sending object type.
- It is now possible to prepare packets externally to send methods. This offers a significant performance boost if the same packet is being sent to multiple destinations.
- 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:
- XPlatformHelper – Adds functionality missing from some mobile frameworks such as IPAddress, IPEndPoint etc.
- 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.
- 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.
- ILogger – The generalised logging interface. Implement this interface using whatever logging solution you would like.
- IPTools – Collection of tools for dealing with IP addresses.
- LogTools – Quickly log exceptions and information to a file.
- MD5 – Managed implementation of the MD5 checksum alogrithm.
- 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.
Bugs
Please report any bugs using our issue tracker here.
Questions and Feedback
We welcome any questions or feedback on this release, preferably via our forums, here.
Download
Please see our download section.