SocketJack 1.0.2.60100

dotnet add package SocketJack --version 1.0.2.60100
                    
NuGet\Install-Package SocketJack -Version 1.0.2.60100
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SocketJack" Version="1.0.2.60100" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SocketJack" Version="1.0.2.60100" />
                    
Directory.Packages.props
<PackageReference Include="SocketJack" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SocketJack --version 1.0.2.60100
                    
#r "nuget: SocketJack, 1.0.2.60100"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=SocketJack&version=1.0.2.60100
                    
Install SocketJack as a Cake Addin
#tool nuget:?package=SocketJack&version=1.0.2.60100
                    
Install SocketJack as a Cake Tool

SocketJack

Fast, Efficient, 100% Managed, Built-in Peer to Peer, Generic, Extensible TCP Client & Server that transmits .NET objects with Type Saftey.

SocketJack automatically serializes Public Properties utilizing a type white-list for security.

SocketJack comes with System.Text.Json support built in.

SocketJack exposes the ISerializer interface which can be used to add another serializer.

The SocketJack.NewtonsoftJson nuget package has been deprecated.

It WILL NOT be updated and does NOT work with 1.0.2+.

v1.0.3 Pending Features

  • Built-in Bitmap, (I/O) File support.
  • Bandwidth throttling
  • Sending will utilize your CPU to it's fullest extent and send 1000s of GB/s if the network allows it.
  • Receving is still limited to a few cores, but compute time threading be improved very soon. *

v1.0.2.60100 Release Notes

Thoroughly tested all features, stable.

Added

  • PeerIdentification.Send will now find it's reference TcpClient Automatically
  • SSL Support
  • Compression
  • Chat Test
  • Generic Callbacks
  • Blacklist
  • RemoteIdentity.Tag
  • Upload buffer

Fixed

  • Segments were disabled by comments
  • PeerServer Accepting
  • Compression Options
  • DefaultOptions Initialization
  • PeerRedirect Type Checking
  • PeerRedirect Vulnerability
  • Non-Generic OnReceive not being called
  • Buffering
  • Race conditions
  • Re-introduced segments for stability

Updated

  • Tests UI
  • Tests compatibility w/ compression & SSL
  • Multi-CPU Support at Runtime
  • Host Caching for Improved Connection Performance
  • Standardized Type, Method, And Function Naming
  • Fully Thread Safe and Concurrent w\ThreadManager Class to handle all Tcp Threading

Getting Started

For a more comprehensive guide on feature-sets of SocketJack please check the Tests project on github

Default Options

TcpClient & TcpServer will inherit properties set to SocketJack.Management.DefaultOptions by default.

Your application will remain open in the background unless you dispose Clients & Servers, or can just do this on Application Exit


ThreadManager.Shutdown();

Building an application with SocketJack


public class MyApp {

    SocketJack.Networking.Client.TcpClient TcpClient = new Client.TcpClient();
    SocketJack.Networking.Server.TcpServer TcpServer = new Server.TcpServer(Port);

    private const string Host = "127.0.0.1";
    private const int Port = 7474;

    // Handle incoming objects
    private void TcpServer_OnReceive(ref ReceivedEventArgs e) {
        // Avoid switch cases or if statements when you have a lot of objects to handle.
    }

 

    private void TcpClient_OnConnected(ConnectedEventArgs e) {
        // Send the server an authorization request
        TcpClient.Send(new AuthorizationRequest());

    }

 

    private void Server_AuthorizationRequest(ReceivedEventArgs<AuthorizationRequest> args) {
        // Handle the auth request on the server
        // Note: This is just used as an example.
        // Please refer to the Tests Project> Chat Test on github for a working example.

    }

 

    private void Client_AuthorizationRequest(ReceivedEventArgs<AuthorizationRequest> args) {
       // Handle the auth request on the client
       // Note: This is just used as an example.
    }

 

    public async void Start_MyApp() {
        // Start the server.
        TcpServer.RegisterCallback<AuthorizationRequest>(Server_AuthorizationRequest);
        TcpServer.OnReceive += TcpServer_OnReceive;
        TcpServer.Listen();

        // Start the client.
        TcpClient.RegisterCallback<AuthorizationRequest>(Client_AuthorizationRequest);
        TcpClient.OnConnected += TcpClient_OnConnected;
        // Connect function timeout is 3 seconds by default.
        await TcpClient.Connect("127.0.0.1", Port);
    }

}

Logging

    TcpClient.Logging = true;
    TcpClient.LogToOutput = true;
    TcpClient.LogReceiveEvents = true;
    TcpClient.LogSendEvents = true;

Peer to peer functionality

Built for faster latency and direct communication between clients.

P2P TcpServer is automatically port forwarded using Mono.NAT UPNP.

Send another client on the server an object WITHOUT extra code or exposing their IP address.

PeerRedirect can be canceled on the server inside the TcpServer.OnReceive by setting e.CancelPeerRedirect to True.

Connect to the main server then, anytime after the TcpClient.OnIdentified Event start a P2P server.

    private async void MyTcpClient_PeerConnected(object sender, PeerIdentification RemotePeer) {

    // Make sure it's not your own client.
    if (MyTcpClient.RemoteIdentity != null && RemotePeer.ID != MyTcpClient.RemoteIdentity.ID) {
        TcpOptions Options = new TcpOptions();
        Options.Logging = true;
        Options.LogReceiveEvents = true;
        Options.LogSendEvents = true;

        TcpServer P2P_Server = await RemotePeer.StartServer(Options, "ExampleServer");
        P2P_Server.OnReceive += P2PServer_OnReceive;
        P2P_Server.OnDisconnected += P2PServer_OnDisconnected;
        P2P_Server.OnError += P2PServer_OnError;
    }
}

Then, on the other Remote Client Accept by handling the TcpClient_PeerConnectionRequest Event.

    private async void MyTcpClient_PeerConnectionRequest(object sender, P2PServer Server) {
        // CHANGE THIS - Add UI which allows the user to accept the connection.
        TcpOptions Options = new TcpOptions();
        Options.Logging = true;
        Options.LogReceiveEvents = true;
        Options.LogSendEvents = true;

        TcpClient P2P_Client = await Server.Accept(options, "ExampleClient");
        P2P_Client.OnReceive += P2PClient_OnReceive;
        P2P_Client.OnConnected += P2PClient_OnConnected;
        P2P_Client.OnDisconnected += P2PClient_OnDisconnected;
        P2P_Client.OnError += P2PClient_OnError;
    }

TcpClient.Send(PeerIdentification, Object)

Contributing

Pull requests are welcome. For major changes, please open an issue first

to discuss what you would like to change.

License

MIT

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on SocketJack:

Package Downloads
SocketJack.NewtonsoftJson

An Implementation of Newtonsoft.Json for SocketJack

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.2.60100 32 6/1/2025

Re-introduced segments for stability
GetPeerClient null check