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

Сеть в Unity3D

Re: серверный движок

Сообщение -Шум- 03 июн 2017, 09:41

Ert Donuell писал(а):Чтобы выйти из цикла, вместо true можно установить флаговую переменную, изменяемую из фонового потока по, например, нажатию Esc. Функционал сервера имеет смысл вынести в отдельный поток.
пока не доделано, но вот что у меня сейчас
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Threading.Tasks;
using System.Net;
 
 
namespace server_login
{
    class AuthenPackage
    {
        public AuthenPackage(string Login, string Password)
        {
            this.Login = Login;
            this.Password = Password;
        }
        public string Login { get; private set; }
        public string Password { get; private set; }
    }
}

потом
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Threading.Tasks;
using System.Net;
 
 
namespace server_login
{
    class UnityClient
    {
        public TcpClient client;
        public UnityClient(TcpClient TcpClient)
        {
            client = TcpClient;
        }
        public void ThreadHandler()
        {
            NetworkStream stream = null;
            try
            {
                stream = client.GetStream();
                using (var reader = new BinaryReader(stream))
                {
                    string login = reader.ReadString();
                    string password = reader.ReadString();
 
                    AuthenPackage package = new AuthenPackage(login, password);
 
                    Console.WriteLine("подключение клиента: {0}, пароль: {1}", package.Login, package.Password);
                }
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write("server ok");
                    writer.Flush();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
 
            finally
            {
                if (stream != null) stream.Close();
                if (client != null) client.Close();
            }
        }
    }
}

и наконец основное тело
Синтаксис:
Используется csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Threading.Tasks;
using System.Net;
 
 
namespace server_login
{
    class Program
    {
        const int Port = 5006;
        static TcpListener server;
        static void Main(string[] args)
        {
            try
            {
                server = new TcpListener(IPAddress.Parse("127.0.0.1"), Port);
                server.Start();
 
                Console.WriteLine("Ожидание подключений...");
 
                while (true)
                {
                    TcpClient client = server.AcceptTcpClient();
                    UnityClient NewClient = new UnityClient(client);
 
                    var task = Task.Run(() => { ThreadHandler(NewClient); });//ТУТ СКОРЕЕ ВСЕГО НЕ ПРАВИЛЬНО ЗАПИСАНО
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (server != null) server.Stop();
            }
        }
-Шум-
UNец
 
Сообщения: 11
Зарегистрирован: 31 май 2017, 05:56

Re: серверный движок

Сообщение -Шум- 03 июн 2017, 09:46

Ert Donuell писал(а):var можно использовать там, в где тип переменной определяется значением, которое ей присваивается:
int i = 0;
эквивалентно
var i = 0;

Но вместо
int i;
i = 0;

нельзя написать
var i;
i = 0;

потому как в строке var i; переменной не присваивается значение

Так, в каждом месте (внутри методов, при объявлении переменных класса так нельзя) вместо
Синтаксис:
Используется csharp
IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8005);
// Создаем сокет Tcp/Ip
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


можно писать

Синтаксис:
Используется csharp
var ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8005);
// Создаем сокет Tcp/Ip
var server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);



Синтаксис:
Используется csharp
using (var writer = new BinaryWriter(stream))
{
    ...
}
 


эквивалентно
Синтаксис:
Используется csharp
var writer = new BinaryWriter(stream);
try
{
    ...
}
finally
{
    writer.Close();
}
 

насчет try\catch мне написали что я слишком много его использую, это в действительности так? нужно ли как-то его заменять?
-Шум-
UNец
 
Сообщения: 11
Зарегистрирован: 31 май 2017, 05:56

Пред.

Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 3