Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / серверный движок - C#

серверный движок - C#

Поделиться

Страницы: 1 2 Следующая

-Шум-Пользовательwww31 мая 201713:08#0
привет у меня такой вопрос, делаю игру и пишу собственный серверный движок. подскажите в правильном ли я направлении двигаюсь? подойдет ли данный подход для написания своих серверов (чат, авторизация, игровой сервер)?
вот пример кода сервера авторизации который я набросал
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace autorization
{
    class Program
    {
        static string log = null;
        static string pas = null;
 
        static void Main(string[] args)
        {
            start_server();
        }
 
        static void start_server()
        {
            // Устанавливаем для сокета локальную конечную точку
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8005);
 
            // Создаем сокет Tcp/Ip
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
            try
            {
                server.Bind(ipPoint);
                server.Listen(10);
                Console.WriteLine("Сервер запущен.");
                // Начинаем слушать соединения
                while (true)
                {
                    Console.WriteLine("Ожидаем соединение через порт {0}", ipPoint);
                    // Программа приостанавливается, ожидая входящее соединение
                    Socket client = server.Accept();
                    // Мы дождались клиента, пытающегося с нами соединиться
                    byte[] receive = new byte[1024];
                    for (int i = 0; i < receive.Length; i++) { receive[i] = 0; }
                    client.Receive(receive);
 
                    string message = Encoding.UTF8.GetString(receive);
                    //Указываем на конец строки с нужными данными
                    int count = message.IndexOf(";;;5");
                    if (count == -1) { continue; }
                    //Создаем переменную, в которой будет храниться очищенное сообщение
                    string clear_message = "";
                    for (int i = 0; i < count; i++) { clear_message += message[i]; }
                    //Начинаем делить очищенное сообщение на отдельные части
                    string[] split = clear_message.Split(':');
 
                    log = split[0];
                    pas = split[1];
 
                    Console.WriteLine("Подключение клиента: " + "Логин: " + log + " Пароль: " + pas);
 
                    if (log == "admin" && pas == "1234")
                    {
                        Console.WriteLine("Данные успешно подтверждены.");
                        // Отправляем ответ клиенту
                        string msg = "yes" + ";;;5";
                        byte[] send = new byte[1024];
                        send = Encoding.UTF8.GetBytes(msg);
                        client.Send(send);
                    }
                    else
                    {
                        Console.WriteLine("Указанные Логин или Пароль не найдены в Базе Данных.");
                        // Отправляем ответ клиенту
                        string msg = "no" + ";;;5";
                        byte[] send = new byte[1024];
                        send = Encoding.UTF8.GetBytes(msg);
                        client.Send(send);
                    }
 
                    Console.WriteLine("Сервер завершил соединение с клиентом.");
                    client.Shutdown(SocketShutdown.Both);
                    client.Close();
                }
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        }
    }
}
TailsПостоялецwww31 мая 201713:25#1
Ты хочешь написать весь сервер в одном классе?
-Шум-Пользовательwww31 мая 201713:38#2
Tails
> Ты хочешь написать весь сервер в одном классе?
нет. ну я хотел бы сделать 2д ммо игру, вот думаю как это все реализовать. я так понял что мне нужно дальше все это дело делать через сокеты? стоит ли мне использовать методы Send \ Recive? или же нужно писать собственную конструкцию для передачи данных? не пойму в чем проблема моего кода? в том что данные передаются массивом байт?, и как разделить грамотно код чтобы не лепить все в 1 класс\ метод?

Правка: 31 мая 2017 13:39

Blew_zcПостоялецwww31 мая 201714:14#3
-Шум-
> в правильном ли я направлении двигаюсь? подойдет ли данный подход для написания
> своих серверов (чат, авторизация, игровой сервер)?
Нет.

-Шум-
> string[] split = clear_message.Split(':');
> log = split[0];
> pas = split[1];
Не годится. Совсем.

-Шум-Пользовательwww31 мая 201714:21#4
Blew_zc
> Нет.
что мне в таком случае использовать?, язык c#.
KolyaLПостоялецwww31 мая 201715:24#5
-Шум-
Попробуй Photon сервер. Язык с#. Там уже все есть. Только логику пиши себе
-Шум-Пользовательwww31 мая 201715:28#6
KolyaL
> KolyaL
мне не нужен фотон, т.к. мне нужен собственный сервер, где я могу сам указать макс. число подключаемых клиентов и прочее
KolyaLПостоялецwww31 мая 201715:35#7
-Шум-
ну так там все это есть
-Шум-Пользовательwww31 мая 201715:47#8
KolyaL
> -Шум-
> ну так там все это ест
я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем хочу обойтись без этого и писать на с#
Blew_zcПостоялецwww31 мая 201715:52#9
-Шум-
> все это платные и непонятные штуки
Возьми Apache Thrift
LucasitoПостоялецwww31 мая 201715:53#10
-Шум-
> я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем
> хочу обойтись без этого и писать на с#
ты думаешь они зря свой хлеб едят? если погрузишься на низком уровне в сеть, не факт, что выплывешь, там такие заморочки бывают, закачаешься.
KolyaLПостоялецwww31 мая 201716:32#11
-Шум-
До 100 ccu бесплатно. У них есть еще просто ММО сервер. Не клауд. Также клиентское сдк под все платформы.
Короче, пиши все сам.
exchgПостоялецwww31 мая 201716:44#12
-Шум-
> в общем хочу обойтись без этого и писать на с#
судя по написанному у тебя не получится ММО сервер.

в принципе есть два варианта:
- читать доки и разбираться как работать с сетью
- взять готовое решение

выбирай.

-Шум-Пользовательwww31 мая 201716:49#13
exchg
> в принципе есть два варианта:
> - читать доки и разбираться как работать с сетью
> - взять готовое решение
>
> выбирай.
я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем коде. но верное ли это решение хз
FireFenixПостоялецwww31 мая 201717:33#14
-Шум-
> я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел
> решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем
> коде. но верное ли это решение хз
Очевидно ты сам не представляешь чего ты хочешь и что тебе нужно.

Сделай чтобы хоть как-то работало по любой технологии....
А потом уже собери всё в кучу, сравни требования и возможности и выбирай то, как делать.

Правка: 31 мая 2017 17:36

Страницы: 1 2 Следующая

/ Форум / Программирование игр / Сеть

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр