IRONSOFTWAREHOME
.NET HELP

Supersocket C# Example (How It Works For Developers)

Jacob Mellor, Chief Technology Officer @ Team Iron
Jacob Mellor
Updated: April 21, 2026

Developing a Server-Side Socket Application with SuperSocket and Integrating IronPDF

SuperSocket C# is an excellent framework for developing a server-side socket application, whether you're working on a GPS server or an industrial control system. It supports various network protocol implementations and ensures your socket works efficiently. This lightweight cross-platform framework is designed to be extensible, providing flexibility for different environments. With SuperSocket, you can easily send data between clients and servers, and its source code is available for customization to meet specific project requirements.

It is an open-source framework, so any developer can implement and access it through GitHub.

SuperSocket C# Example (How It Works for Developers): Figure 1 - GitHub page for SuperSocket

IronPDF is a powerful .NET library for creating, editing, and extracting content from PDF documents. It's designed for developers who need to integrate PDF functionality into their applications. IronPDF supports various features like generating PDFs from HTML, merging PDFs, and extracting text and images from PDFs.

SuperSocket and IronPDF together can power complex server-side applications. They offer a wide range of functionalities to meet the needs of modern .NET developers. These libraries are perfect for whether you're building a data acquisition server or a robust game server where real-time chat applications are necessary.

Getting Started with SuperSocket C#

Setting Up SuperSocket C# in .NET Projects

To start using SuperSocket C#, you need to set up your .NET project. First, install the SuperSocket NuGet package. Open your project in Visual Studio and run the following command in the Package Manager Console:

PM > Install-Package SuperSocket

SuperSocket C# Example (How It Works for Developers): Figure 2 - Console output from installing SuperSocket

Once installed, you can configure your server instance. Create a new configuration file named appsettings.json. This file will define the server settings, including the listeners and protocols.

{
  "serverOptions": {
    "name": "SuperSocketServer",
    "listeners": [
      {
        "ip": "Any",
        "port": 4040
      }
    ]
  }
}
JSON

Next, create a class to configure the server. This class will read the settings from appsettings.json and initialize the server instance.

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Server;

public class ServerConfig
{
    public async Task Configure()
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<YourSession>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

A Basic SuperSocket C# Example

Let's look at a basic example of a SuperSocket C# application. This example demonstrates how to create a simple echo server that sends back any received data.

First, define the session class. This class will handle the socket connections and manage data communication.

using SuperSocket;

public class EchoSession : AppSession
{
    protected override async ValueTask OnSessionStartedAsync()
    {
        await base.OnSessionStartedAsync();
        Console.WriteLine("New session started.");
    }

    protected override async ValueTask OnSessionClosedAsync(CloseEventArgs e)
    {
        await base.OnSessionClosedAsync(e);
        Console.WriteLine("Session closed.");
    }

    protected override async ValueTask OnPackageReceivedAsync(ReadOnlyMemory<byte> package)
    {
        await SendAsync(package);
    }
}

Next, configure and run the server with the echo session.

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Server;

public class EchoServer
{
    public static async Task Main(string[] args)
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<EchoSession>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

This example shows how to create a simple echo server using SuperSocket C#. The server listens for connections and echoes back any data it receives.

Implementing Features of SuperSocket C#

Handling Multiple Listeners

SuperSocket C# supports multiple listeners, allowing your server to handle different protocols and ports. This feature is useful for creating versatile applications like data acquisition servers and GPS servers.

First, update your appsettings.json to include multiple listeners:

{
  "serverOptions": {
    "name": "MultiListenerServer",
    "listeners": [
      {
        "ip": "Any",
        "port": 4040
      },
      {
        "ip": "Any",
        "port": 5050
      }
    ]
  }
}
JSON

Next, configure the server to use these listeners:

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Server;

public class MultiListenerServer
{
    public static async Task Main(string[] args)
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<YourSession>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

With this setup, your server can handle connections on both ports 4040 and 5050. This capability is crucial for applications that need to manage various network protocols.

Implementing Binary Data Handling

SuperSocket C# is efficient at handling binary data. This is important for applications that require binary-level compatibility, such as industrial control systems.

First, define a session class that processes binary data:

using System;
using SuperSocket;

public class BinaryDataSession : AppSession
{
    protected override async ValueTask OnPackageReceivedAsync(ReadOnlyMemory<byte> package)
    {
        var data = package.ToArray();
        Console.WriteLine("Received binary data: " + BitConverter.ToString(data));
        await SendAsync(data);
    }
}

Next, configure and run the server with the binary data session:

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Server;

public class BinaryDataServer
{
    public static async Task Main(string[] args)
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<BinaryDataSession>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

This example demonstrates how to receive and send binary data using SuperSocket C#. It's useful for high-performance applications that need to process binary protocols.

Managing Socket Connections

Maintaining socket connections is essential for ensuring reliable communication. SuperSocket C# simplifies this process.

First, define a session class that manages socket connections:

using SuperSocket;

public class ConnectionSession : AppSession
{
    protected override async ValueTask OnSessionStartedAsync()
    {
        await base.OnSessionStartedAsync();
        Console.WriteLine("Connection started.");
    }

    protected override async ValueTask OnSessionClosedAsync(CloseEventArgs e)
    {
        await base.OnSessionClosedAsync(e);
        Console.WriteLine("Connection closed.");
    }

    protected override async ValueTask OnPackageReceivedAsync(ReadOnlyMemory<byte> package)
    {
        await SendAsync(package);
    }
}

Next, configure and run the server with the connection session:

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Server;

public class ConnectionServer
{
    public static async Task Main(string[] args)
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<ConnectionSession>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

This setup helps manage socket connections, ensuring that your server remains robust and reliable.

Creating a Command-Line Server

SuperSocket C# supports creating command-line servers. This feature is useful for applications that require simple text-based protocols.

First, define a command class that processes text commands:

using System.Text;
using System.Threading.Tasks;
using SuperSocket.Command;
using SuperSocket.ProtoBase;

public class MyCommand : IAsyncCommand<AppSession, StringPackageInfo>
{
    public async ValueTask ExecuteAsync(AppSession session, StringPackageInfo package)
    {
        var commandKey = package.Key;
        var parameters = package.Parameters;
        await session.SendAsync(Encoding.UTF8.GetBytes($"You said: {string.Join(' ', parameters)}"));
    }
}

Next, configure the server to use the command:

using Microsoft.Extensions.Configuration;
using SuperSocket;
using SuperSocket.Command;
using SuperSocket.ProtoBase;
using SuperSocket.Server;

public class CommandLineServer
{
    public static async Task Main(string[] args)
    {
        var host = SuperSocketHostBuilder.Create()
            .UseTcpServer()
            .UseSession<AppSession>()
            .UseCommand<StringPackageParser>()
            .AddCommand<MyCommand>()
            .ConfigureAppConfiguration((hostCtx, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            })
            .Build();
        await host.RunAsync();
    }
}

This example shows how to create a simple command-line server using SuperSocket C#. It's ideal for lightweight text-based protocols.

Integrating SuperSocket C# with IronPDF

Integrating IronPDF with SuperSocket in your C# applications can significantly enhance your server capabilities, especially when it comes to handling PDF files. Let's explore how to merge these two powerful libraries effectively.

Introduction to IronPDF

IronPDF webpage

IronPDF .NET Library is a versatile .NET library designed for creating, editing, and extracting content from PDF documents. Whether you need to generate reports, invoices, or any other PDF-based documents, IronPDF provides an easy-to-use API to accomplish these tasks. Its main feature is its HTML-to-PDF Conversion capabilities. It's a great tool for developers looking to incorporate PDF functionality into their applications without dealing with the complexities of PDF specifications.

IronPDF excels in HTML to PDF conversion, ensuring precise preservation of original layouts and styles. It's perfect for creating PDFs from web-based content such as reports, invoices, and documentation. With support for HTML files, URLs, and raw HTML strings, IronPDF easily produces high-quality PDF documents.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Use Case of Merging IronPDF with SuperSocket C#

Imagine you have a server built with SuperSocket that needs to handle client requests for generating and sending PDF documents dynamically. By integrating IronPDF, your server can process these requests, create PDFs on the fly, and send them back to the clients seamlessly.

Code Example of Use Case

Here's a complete code example demonstrating how to integrate IronPDF with SuperSocket. This example sets up a simple SuperSocket server that listens for client connections, processes a request to generate a PDF, and sends the generated PDF back to the client.

using System;
using System.Net;
using System.Text;
using IronPdf;
using SuperSocket.SocketBase;
using SuperSocket.SocketBase.Protocol;

namespace SuperSocketIronPDFExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var appServer = new AppServer();
            var serverConfig = new SuperSocket.SocketBase.Config.ServerConfig
            {
                Name = "SuperSocketServer",
                Ip = "Any",
                Port = 2012,
                Mode = SuperSocket.SocketBase.SocketMode.Tcp,
                MaxConnectionNumber = 100,
            };

            if (!appServer.Setup(serverConfig))
            {
                Console.WriteLine("Failed to set up!");
                return;
            }

            appServer.NewSessionConnected += NewSessionConnected;
            appServer.NewRequestReceived += (session, requestInfo) =>
            {
                if (requestInfo.Key == "GENPDF")
                {
                    var pdfDocument = CreatePdfDocument(requestInfo.Body);
                    var pdfBytes = pdfDocument.BinaryData;
                    session.Send(pdfBytes, 0, pdfBytes.Length);
                    Console.WriteLine("PDF document sent to client.");
                }
            };

            if (!appServer.Start())
            {
                Console.WriteLine("Failed to start!");
                return;
            }

            Console.WriteLine("Server is running. Press any key to stop...");
            Console.ReadKey();
            appServer.Stop();
        }

        private static PdfDocument CreatePdfDocument(string content)
        {
            var pdfRenderer = new ChromePdfRenderer();
            var pdfDocument = pdfRenderer.RenderHtmlAsPdf(content);
            return pdfDocument;
        }

        private static void NewSessionConnected(AppSession session)
        {
            Console.WriteLine($"New session connected: {session.SessionID}");
        }
    }

    public class AppServer : AppServer<AppSession, StringRequestInfo>
    {
    }

    public class AppSession : AppSession<AppSession, StringRequestInfo>
    {
    }
}

This integration allows you to leverage the powerful features of IronPDF within a SuperSocket server, enabling dynamic PDF generation and efficient client-server communication.

Conclusion

Integrating SuperSocket with IronPDF's Comprehensive Features is a powerful combination for creating dynamic, high-performance server applications that can handle PDF generation and processing seamlessly. With SuperSocket's robust socket server framework and IronPDF's comprehensive PDF functionalities, you can develop scalable and versatile applications to meet various needs, from data acquisition systems to game servers and industrial control systems.

IronPDF offers a free trial, and its licensing starts from $999, providing excellent value for the extensive capabilities it brings to your development projects. By merging these two libraries, you can streamline your server's ability to handle complex tasks efficiently, enhancing both functionality and performance.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor is Chief Technology Officer at Iron Software and a visionary engineer pioneering C# PDF technology. As the original developer behind Iron Software's core codebase, he has shaped the company's product architecture since its inception, transforming it alongside CEO Cameron Rimington into a 50+ person company serving NASA, Tesla, and global government agencies.

...
Read More

Related Articles

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

OR
bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required
C# NuGet Library for PDF
Install with NuGet

Version: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. In Solution Explorer, right-click References, Manage NuGet Packages
  2. Select Browse and search "IronPdf"
  3. Select the package and install
C# PDF DLL
Download DLL

Version: 2026.9

or download Windows Installer here.

  1. Download and unzip IronPDF to a location such as ~/Libs within your Solution directory
  2. In Visual Studio Solution Explorer, right click References. Select Browse, "IronPdf.dll"

Licenses from $999