SocketJack 1.0.0

Additional Details

DEPRECATED (CVE-2020-25258)
-NO SECURITY SUPPORT.
-BUFFER FAILURES.

NOT COMPATIBLE WITH >= 1.0.1
Upgrade to 1.0.2 for security, compatibility, and stability.

There is a newer version of this package available.
See the version list below for details.
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package SocketJack --version 1.0.0
                    
NuGet\Install-Package SocketJack -Version 1.0.0
                    
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.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SocketJack" Version="1.0.0" />
                    
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.0
                    
#r "nuget: SocketJack, 1.0.0"
                    
#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.
#:package SocketJack@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SocketJack&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=SocketJack&version=1.0.0
                    
Install as a Cake Tool

SocketJack

Fast, Efficient, 100% Managed, Peer to Peer, Non Generic, Extensible TCP Client & Server with built in Serialization that can be used to transmit any type.

Note You cannot send UI classes or anything with self-referencing unless those properties are private.

SocketJack automatically serializes Public Properties for transfer within each object you send or receive without using generics safely by white-listing used types.

Security Vulerabilities can be avoided.

Use your OWN discretion

YOU SHOULD NEVER. EVER. WHITE-LIST A TYPE THAT CAN BE EXPLOITED.

{
    Server.RegisterCallback(typeof(MyObjectType), Received_MyObject);
}
    private void Received_BandwidthObject(ReceivedEventArgs args) {
        Console.WriteLine("Received: MyObject");
    }

or

    TcpClient.Whitelist.AddType(Type);
    TcpServer.Whitelist.AddType(Type);

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

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

You can also install SocketJack.NewtonsoftJson or implement your own choice of serializers.

SocketJack.NewtonsoftJson Nuget Package

PM> NuGet\Install-Package  SocketJack.NewtonsoftJson

Roadmap

  • SSL Support
  • Bandwidth limiting
  • FTP-like Functions

v1.0.0.0 Release Notes

  • Multi-CPU Support at Runtime (No configuration required)
  • Fully Thread Safe and Concurrent w\ThreadManager Class to handle all Tcp Threading
  • Host Caching for Improved Connection Performance
  • Standardized Type, Method, And Function Naming

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

    ThreadManager.Shutdown();

Peer to peer functionality

Built for faster latency and direct communication between clients. P2P TcpServer is automatically port forwarded using Mono.NAT UPNP.

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) {
        TcpServer  P2P_Server = await  RemotePeer.StartServer("ExampleServer");
        P2P_Server.Logging = true;
        P2P_Server.LogReceiveEvents = true;
        P2P_Server.LogSendEvents = true;
        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.
    TcpClient  P2P_Client = await  Server.Accept(true, "ExampleClient");
    P2P_Client.Logging = true;
    P2P_Client.LogReceiveEvents = true;
    P2P_Client.LogSendEvents = true;
    P2P_Client.OnReceive += P2PClient_OnReceive;
    P2P_Client.OnConnected += P2PClient_OnConnected;
    P2P_Client.OnDisconnected += P2PClient_OnDisconnected;
    P2P_Client.OnError += P2PClient_OnError;
}

Features also incude TcpClient.Send(PeerIdentification, Object) for easily sending indirectly to another client from a client without having to handle it on the server. PeerRedirect can be canceled on the server inside the TcpServer.OnReceive via e.CancelPeerRedirect to True. Debug/Console Logging added for all network events besides Send and Receive via TcpClient.Logging = True & TcpClient.LogToOutput = True etc.. Send and Receive events can be individually enabled via TcpClient.LogReceiveEvents etc... Async TcpClient.Connect() w/ timeout (3 seconds) & AutoReconnect Option.

Examples

C#

SocketJack.Networking.Client.TcpClient  TcpClient;
SocketJack.Networking.Server.TcpServer  TcpServer;

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

// Handle the incoming object
private  void  TcpServer_OnReceive(ref  ReceivedEventArgs  e) {
    // Send The Client an Object
    TcpServer.Send(Client, MySerializableClass);

    // Send All Clients an Object
    TcpServer.Broadcast(MySerializableClass);

}

private  void  TcpClient_OnConnected(ConnectedEventArgs  e) {
    TcpClient.Send(new  AuthorizationRequestObject());
}

public  SurroundingVoid() {
    // Creating a server.
    TcpServer = new  Server.TcpServer(Port);
    TcpServer.OnReceive += TcpServer_OnReceive;

    // '9999' being the max amount of pending connections allowed.
    TcpServer.Listen(9999);


    // Creating a client.
    TcpClient = new  Client.TcpClient();
    TcpClient.OnConnected += TcpClient_OnConnected;
    TcpClient.Connect("127.0.0.1", Port);
}

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 was computed.  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 was computed.  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 was computed.  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.3.0 83 2/7/2026
1.2.3 100 1/19/2026
1.2.2 434 12/8/2025
1.2.1 165 10/3/2025
1.2.0 368 9/24/2025 1.2.0 is deprecated because it has critical bugs.
1.1.0.1 96 8/2/2025
1.0.3 190 7/4/2025
1.0.2.60100 233 6/1/2025
Loading failed

v1.0.0.0