Как настроить обмен данными по протоколам TCP/HTTP между двумя программами на C# на одном сервере?

Как создать HTTP/TCP сервер прямо в плагине для онлайн игры на Unity для логирования и управления сервером с помощью Discord бота?
  • 23 июля 2024 г. 17:43
Ответы на вопрос 2
Для настройки обмена данными по протоколам TCP/HTTP между двумя программами на C# на одном сервере, вы можете использовать классы TcpClient, TcpListener и HttpListener из пространства System.Net в C#. Пример кода для установления TCP-соединения между клиентом и сервером:

```c#
// Server
TcpListener server = new TcpListener(IPAddress.Any, 8080);
server.Start();
Console.WriteLine("Server started...");

TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream);

// Client
TcpClient client = new TcpClient("127.0.0.1", 8080);
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream);
```

Для создания HTTP/TCP сервера в плагине для онлайн игры на Unity вы можете использовать библиотеку .NET Core, такую как Kestrel, для создания сервера. Пример кода для создания HTTP сервера:

```c#
var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup<Startup>()
    .Build();

host.Run();
```

Для логирования и управления сервером с помощью Discord бота, вам потребуется интегрировать библиотеку Discord.NET для создания и управления ботом. Пример кода для создания Discord бота:

```c#
public class DiscordBot
{
    private DiscordSocketClient _client;

    public async Task MainAsync()
    {
        _client = new DiscordSocketClient();

        _client.Log += LogAsync;

        string token = "Your bot token";
        await _client.LoginAsync(TokenType.Bot, token);
        await _client.StartAsync();

        await Task.Delay(-1);
    }

    private Task LogAsync(LogMessage log)
    {
        Console.WriteLine(log.Message);
        return Task.CompletedTask;
    }
}
```

Вы можете вызывать методы сервера в HTTP/TCP сервере в плагине для Unity и управлять ими с помощью методов, вызываемых через Discord бота.
Может, таки, использовать ZeroMQ? 
Отправление команд по TCP/IP.
Похожие вопросы