привет у меня такой вопрос, делаю игру и пишу собственный серверный движок. подскажите в правильном ли я направлении двигаюсь? подойдет ли данный подход для написания своих серверов (чат, авторизация, игровой сервер)?
вот пример кода сервера авторизации который я набросал
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
> Ты хочешь написать весь сервер в одном классе?
нет. ну я хотел бы сделать 2д ммо игру, вот думаю как это все реализовать. я так понял что мне нужно дальше все это дело делать через сокеты? стоит ли мне использовать методы Send \ Recive? или же нужно писать собственную конструкцию для передачи данных? не пойму в чем проблема моего кода? в том что данные передаются массивом байт?, и как разделить грамотно код чтобы не лепить все в 1 класс\ метод?
-Шум-
> в правильном ли я направлении двигаюсь? подойдет ли данный подход для написания
> своих серверов (чат, авторизация, игровой сервер)?
Нет.
-Шум-
> string[] split = clear_message.Split(':');
> log = split[0];
> pas = split[1];
Не годится. Совсем.
Blew_zc
> Нет.
что мне в таком случае использовать?, язык c#.
-Шум-
Попробуй Photon сервер. Язык с#. Там уже все есть. Только логику пиши себе
KolyaL
> KolyaL
мне не нужен фотон, т.к. мне нужен собственный сервер, где я могу сам указать макс. число подключаемых клиентов и прочее
-Шум-
ну так там все это есть
KolyaL
> -Шум-
> ну так там все это ест
я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем хочу обойтись без этого и писать на с#
-Шум-
> все это платные и непонятные штуки
Возьми Apache Thrift
-Шум-
> я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем
> хочу обойтись без этого и писать на с#
ты думаешь они зря свой хлеб едят? если погрузишься на низком уровне в сеть, не факт, что выплывешь, там такие заморочки бывают, закачаешься.
-Шум-
До 100 ccu бесплатно. У них есть еще просто ММО сервер. Не клауд. Также клиентское сдк под все платформы.
Короче, пиши все сам.
-Шум-
> в общем хочу обойтись без этого и писать на с#
судя по написанному у тебя не получится ММО сервер.
в принципе есть два варианта:
- читать доки и разбираться как работать с сетью
- взять готовое решение
выбирай.
exchg
> в принципе есть два варианта:
> - читать доки и разбираться как работать с сетью
> - взять готовое решение
>
> выбирай.
я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем коде. но верное ли это решение хз
-Шум-
> я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел
> решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем
> коде. но верное ли это решение хз
Очевидно ты сам не представляешь чего ты хочешь и что тебе нужно.
Сделай чтобы хоть как-то работало по любой технологии....
А потом уже собери всё в кучу, сравни требования и возможности и выбирай то, как делать.
Тема в архиве.
Тема закрыта.