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

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

Страницы: 1 2 Следующая »
#0
13:08, 31 мая 2017

привет у меня такой вопрос, делаю игру и пишу собственный серверный движок. подскажите в правильном ли я направлении двигаюсь? подойдет ли данный подход для написания своих серверов (чат, авторизация, игровой сервер)?
вот пример кода сервера авторизации который я набросал

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


#1
13:25, 31 мая 2017

Ты хочешь написать весь сервер в одном классе?

#2
13:38, 31 мая 2017

Tails
> Ты хочешь написать весь сервер в одном классе?
нет. ну я хотел бы сделать 2д ммо игру, вот думаю как это все реализовать. я так понял что мне нужно дальше все это дело делать через сокеты? стоит ли мне использовать методы Send \ Recive? или же нужно писать собственную конструкцию для передачи данных? не пойму в чем проблема моего кода? в том что данные передаются массивом байт?, и как разделить грамотно код чтобы не лепить все в 1 класс\ метод?

#3
14:14, 31 мая 2017

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

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

#4
14:21, 31 мая 2017

Blew_zc
> Нет.
что мне в таком случае использовать?, язык c#.

#5
15:24, 31 мая 2017

-Шум-
Попробуй Photon сервер. Язык с#. Там уже все есть. Только логику пиши себе

#6
15:28, 31 мая 2017

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

#7
15:35, 31 мая 2017

-Шум-
ну так там все это есть

#8
15:47, 31 мая 2017

KolyaL
> -Шум-
> ну так там все это ест
я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем хочу обойтись без этого и писать на с#

#9
15:52, 31 мая 2017

-Шум-
> все это платные и непонятные штуки
Возьми Apache Thrift

#10
15:53, 31 мая 2017

-Шум-
> я смотрел фотон клоуд фотон сервер, все это платные и непонятные штуки, в общем
> хочу обойтись без этого и писать на с#
ты думаешь они зря свой хлеб едят? если погрузишься на низком уровне в сеть, не факт, что выплывешь, там такие заморочки бывают, закачаешься.

#11
16:32, 31 мая 2017

-Шум-
До 100 ccu бесплатно. У них есть еще просто ММО сервер. Не клауд. Также клиентское сдк под все платформы.
Короче, пиши все сам.

#12
16:44, 31 мая 2017

-Шум-
> в общем хочу обойтись без этого и писать на с#
судя по написанному у тебя не получится ММО сервер.

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

выбирай.

#13
16:49, 31 мая 2017

exchg
> в принципе есть два варианта:
> - читать доки и разбираться как работать с сетью
> - взять готовое решение
>
> выбирай.
я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем коде. но верное ли это решение хз

#14
17:33, 31 мая 2017

-Шум-
> я уже много переломатил инфы, меня мучает вопрос как самому написать, я нашел
> решение с помощью сокетом и тср, что я собственно и пытался реализовать в своем
> коде. но верное ли это решение хз
Очевидно ты сам не представляешь чего ты хочешь и что тебе нужно.

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

Страницы: 1 2 Следующая »
ПрограммированиеФорумСеть

Тема в архиве.

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