.NET ヘルプ

Supersocket C#の例(開発者向けの動作方法)

ジョルディ・バルディア
ジョルディ・バルディア
2024年7月1日
共有:

SuperSocketを用いたサーバーサイドソケットアプリケーションの開発とIronPDFの統合

SuperSocket C#(スーパソケットC#)は、GPSサーバーや産業制御システムに取り組んでいる場合でも、サーバーサイドのソケットアプリケーションを開発するための優れたフレームワークです。 さまざまなネットワークプロトコルの実装をサポートし、ソケットが効率的に動作することを保証します。 この軽量なクロスプラットフォームフレームワークは、さまざまな環境に対応する柔軟性を提供するように拡張可能な設計がされています。 SuperSocketを使用すると、クライアントとサーバー間でデータを簡単に送信でき、そのソースコードは特定のプロジェクト要件に合わせてカスタマイズすることができます。

これはオープンソースのフレームワークであり、どの開発者でもGitHubを通して実装およびアクセスすることができます。

SuperSocket C#の例(開発者向けの動作方法):図1 - SuperSocketのGitHubページ

IronPDF は、PDFドキュメントの作成、編集、および内容抽出を行うための強力な.NETライブラリです。 それは、自分のアプリケーションにPDF機能を統合する必要がある開発者向けに設計されています。 IronPDFは、HTMLからPDFの生成、PDFのマージ、PDFからのテキストや画像の抽出などのさまざまな機能をサポートしています。

SuperSocket と IronPDF を一緒に使用することで、複雑なサーバーサイドアプリケーションを実現できます。 彼らは、現代の.NET開発者のニーズを満たすために幅広い機能を提供しています。 これらのライブラリは、データ取得サーバーを構築する場合やリアルタイムチャットアプリケーションが必要な堅牢なゲームサーバーを構築する場合に最適です。

SuperSocket C# の始め方

.NETプロジェクトにおけるSuperSocket C#のセットアップ

SuperSocket C#の使用を開始するには、まず.NETプロジェクトを設定する必要があります。 まず、SuperSocket NuGetパッケージをインストールします。 Visual Studioでプロジェクトを開き、パッケージマネージャーコンソールで次のコマンドを実行します:

Install-Package SuperSocket

開発者向けのSuperSocket C#の例(動作方法):図2 - SuperSocketのインストール後のコンソール出力

インストールが完了したら、サーバーインスタンスを構成できます。 新しい設定ファイルを appsettings.json という名前で作成します。 このファイルは、リスナーおよびプロトコルを含むサーバー設定を定義します。

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

次に、サーバーを設定するためのクラスを作成します。 このクラスは appsettings.json から設定を読み取り、サーバーインスタンスを初期化します。

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();
    }
}
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();
    }
}

基本的なSuperSocket C#の例

では、SuperSocket C# アプリケーションの基本的な例を見てみましょう。 この例は、受信したデータをそのまま送り返すシンプルなエコーサーバーを作成する方法を示しています。

まず、セッションクラスを定義します。 このクラスはソケット接続を処理し、データ通信を管理します。

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);
    }
}
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);
    }
}

次に、エコーセッションでサーバーを構成して実行します。

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();
    }
}
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();
    }
}

この例は、SuperSocket C# を使用してシンプルなエコーサーバーを作成する方法を示しています。 サーバーは接続を待ち受け、受信したデータをそのまま返します。

SuperSocket C# の機能の実装

複数のリスナーの処理

SuperSocket C# は複数のリスナーをサポートしており、サーバーが異なるプロトコルやポートを処理できるようにします。 この機能は、データ取得サーバやGPSサーバのような多用途アプリケーションを作成するために便利です。

まず、appsettings.jsonを更新して複数のリスナーを含めます:

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

次に、これらのリスナーを使用するようにサーバーを設定します。

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();
    }
}
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();
    }
}

このセットアップにより、サーバーはポート4040と5050の両方で接続を処理できます。この機能は、さまざまなネットワーク プロトコルを管理する必要があるアプリケーションにとって重要です。

バイナリデータ処理の実装

SuperSocket C#はバイナリデータの処理に効率的です。 これは、産業制御システムのようなバイナリレベルの互換性を必要とするアプリケーションにとって重要です。

まず、バイナリデータを処理するセッションクラスを定義します:

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);
    }
}
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);
    }
}

次に、バイナリデータセッションを使用してサーバーを構成し、実行します。

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();
    }
}
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();
    }
}

以下の例は、SuperSocket C# を使用してバイナリデータを受信および送信する方法を示しています。 バイナリプロトコルを処理する必要がある高性能アプリケーションにとって有用です。

ソケット接続の管理

ソケット接続の維持は、信頼できる通信を確保するために不可欠です。 SuperSocket C# はこのプロセスを簡単にします。

まず、ソケット接続を管理するセッションクラスを定義します:

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);
    }
}
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);
    }
}

次に、接続セッションを使用してサーバーを構成し、実行します。

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();
    }
}
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();
    }
}

このセットアップはソケット接続を管理し、サーバーが堅牢で信頼できる状態を維持するのに役立ちます。

コマンドラインサーバーの作成

SuperSocket C#は、コマンドラインサーバーの作成をサポートします。 この機能は、シンプルなテキストベースのプロトコルを必要とするアプリケーションに便利です。

まず、テキストコマンドを処理するコマンドクラスを定義します:

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)}"));
    }
}
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)}"));
    }
}

次に、コマンドを使用するようにサーバーを設定します:

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();
    }
}
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();
    }
}

この例では、SuperSocket C# を使用してシンプルなコマンドラインサーバーを作成する方法を示します。 軽量なテキストベースのプロトコルに最適です。

SuperSocket C#をIronPDFと統合する方法

C#アプリケーションにおいて、SuperSocketとIronPDFを統合することで、特にPDFファイルの処理に関してサーバーの能力を大幅に向上させることができます。 これらの2つの強力なライブラリを効果的に統合する方法を探りましょう。

IronPDFの紹介

IronPDFウェブページ

IronPDF .NET ライブラリは、PDFドキュメントの作成、編集、およびコンテンツの抽出のために設計された多用途の.NETライブラリです。 レポート、請求書、その他のPDFベースのドキュメントを生成する必要がある場合、IronPDFはこれらのタスクを達成するための使いやすいAPIを提供します。 主な特徴は、その**HTMLからPDFへの変換機能。 PDFの仕様の複雑さに対処することなく、自分のアプリケーションにPDF機能を組み込みたいと考えている開発者にとって、これは素晴らしいツールです。

IronPDFは、以下に優れていますHTMLからPDF変換時に、元のレイアウトとスタイルを正確に保持します。 それは、レポート、請求書、およびドキュメントなどのWebベースのコンテンツからPDFを作成するのに最適です。 IronPDFはHTMLファイル、URL、生のHTML文字列をサポートしており、簡単に高品質なPDFドキュメントを生成します。

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");
    }
}
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");
    }
}

IronPDFをSuperSocket C#と統合するユースケース

SuperSocketを使用して構築されたサーバーが、クライアントからのリクエストに応じてPDFドキュメントを動的に生成および送信する必要があると想像してみてください。 IronPDFを統合することで、サーバーはこれらのリクエストを処理し、即座にPDFを作成してクライアントにシームレスに送信することができます。

使用例のコード例

以下は、IronPDFとSuperSocketを統合する方法を示す完全なコード例です。 この例では、クライアント接続を待ち受け、PDFを生成するリクエストを処理し、生成されたPDFをクライアントに送信するシンプルなSuperSocketサーバーをセットアップします。

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
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 ServerConfig
            {
                Name = "SuperSocketServer",
                Ip = "Any",
                Port = 2012,
                Mode = SocketMode.Tcp,
                MaxConnectionNumber = 100,
            };
            if (!appServer.Setup(serverConfig))
            {
                Console.WriteLine("Failed to set up!");
                return;
            }
            appServer.NewSessionConnected += NewSessionConnected;
            appServer.NewRequestReceived += NewRequestReceived;
            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 void NewSessionConnected(AppSession session)
        {
            Console.WriteLine($"New session connected: {session.SessionID}");
        }

        private static void NewRequestReceived(AppSession session, StringRequestInfo 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.");
            }
        }

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

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

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

    public class StringRequestFilterFactory : IRequestFilterFactory<StringRequestInfo>
    {
        public IRequestFilter<StringRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, IPEndPoint remoteEndPoint)
        {
            return new TerminatorRequestFilterFactory().CreateFilter(appServer, appSession, remoteEndPoint);
        }
    }
}
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
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 ServerConfig
            {
                Name = "SuperSocketServer",
                Ip = "Any",
                Port = 2012,
                Mode = SocketMode.Tcp,
                MaxConnectionNumber = 100,
            };
            if (!appServer.Setup(serverConfig))
            {
                Console.WriteLine("Failed to set up!");
                return;
            }
            appServer.NewSessionConnected += NewSessionConnected;
            appServer.NewRequestReceived += NewRequestReceived;
            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 void NewSessionConnected(AppSession session)
        {
            Console.WriteLine($"New session connected: {session.SessionID}");
        }

        private static void NewRequestReceived(AppSession session, StringRequestInfo 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.");
            }
        }

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

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

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

    public class StringRequestFilterFactory : IRequestFilterFactory<StringRequestInfo>
    {
        public IRequestFilter<StringRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, IPEndPoint remoteEndPoint)
        {
            return new TerminatorRequestFilterFactory().CreateFilter(appServer, appSession, remoteEndPoint);
        }
    }
}

この統合により、SuperSocketサーバー内でIronPDFの強力な機能を活用し、動的なPDF生成と効率的なクライアント-サーバー間通信を実現することができます。

結論

IronPDFライセンス情報

SuperSocketを統合するIronPDFの包括的な機能PDFの生成および処理をシームレスに行える、動的で高性能なサーバーアプリケーションを作成するための強力な組み合わせです。 SuperSocketの堅牢なソケットサーバーフレームワークとIronPDFの包括的なPDF機能を組み合わせることで、データ収集システムからゲームサーバー、産業用制御システムまで、さまざまなニーズに対応するスケーラブルで多目的なアプリケーションを開発できます。

IronPDFは無料体験そのライセンスは$749から始まり、開発プロジェクトに広範な機能を提供する優れた価値を提供します。 これら二つのライブラリを統合することで、サーバーの複雑なタスク処理能力を効率化し、機能性と性能の両方を向上させることができます。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
Quartz .NET(開発者向けの動作の仕組み)
次へ >
Dottrace .NET Core(開発者向けの仕組み)