Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Создать новый поток для Udp подключения http://www.cyberforum.ru/csharp-net/thread1055813.html
Очень давно писал серверно-клиентское приложение на сокетах, тогда использовал Tcp прокол. И для каждого нового клиентского подключения создавал в отдельном потоке отдельный обработчик сообщений. Как...
Ускорить вызов события C#
Существует высокоскоростной метод который каждый такт вызывает событие типа: public delegate void MyEvent(double Procent); public event MyEvent Procent; Проблема в том что один только...
Автозаполнение страницы с иерархической структурой C#
Допустим есть сайт. На нём есть комбобокс. Взависимости от значения комбобокса появляются различные формы с другими комбобоксами итд, по иерархии. Вопрос: Как проще всего реализовать автозаполнение...
C# Подскажите элегантный подход Здравствуйте. Предлагаю пример моей реализации. Далее попрошу дать совет по улучшению. interface ISaveRead { public void Save(BinaryWriter bw); public... http://www.cyberforum.ru/csharp-net/thread1055500.html
C# Кракозябры при использовании службы windows http://www.cyberforum.ru/csharp-net/thread1055141.html
Добрый день всем! Прошу помощи в хитром вопросе. Один и тот же код реализован в виде консоли и службы windows. Код вызывает COM-сервер, который считывает данные из некоторого бинарного файла и...
Реально ли сделать связку с Qt для обеспечения кроссплатформенности C#
Имею приложение, написанное на С#, реально ли сделать связку с Qt для обеспечения кроссплатформенности? Есть ли удачные прецеденты?..)
Клиент-сервер по интернету. Какой IP указать для сервера, если ПК - в общежитии с 1 роутером C#
Здравствуйте не знаю тут ли задавать этот вопрос. У меня в общежитии на всех компах один IP и в комнате стоит маршрутизатор. Я например создал простенький сервер на Sockets, а клиенты от этого...
C# Современные технологии доступа к удаленному DCOM Доброго времени суток уважаемые форумчане. Есть задача подключиться к удаленному компьютеру по DCOM, какие сейчас существуют современные технологии облегчающие эти задачи? Самая основная проблема... http://www.cyberforum.ru/csharp-net/thread1054471.html
C# Сравнение звукового файла с образцом http://www.cyberforum.ru/csharp-net/thread1054430.html
Нужно сравнить некий звуковой файл с имеющимся образцом и понять идентичны они или нет. Побитовое сравнение не подходит. Файлы могут быть разной длины и качества (песни). Подскажите , плиз. куда...
C# Конвертирование HTML документа в XML Хелп плиз!! Срочно!!! Подскажите и покажите, какими способами можно легко конвертнуть HTML документ в XML? На c# Заранее спасибо:) http://www.cyberforum.ru/csharp-net/thread1054193.html
SkoTi
-20 / 5 / 6
Регистрация: 03.10.2012
Сообщений: 532
29.12.2013, 13:49  [ТС] 0

Клиент-сервер. Как в многопользовательском чате реализовать личные сообщения

29.12.2013, 13:49. Просмотров 1301. Ответов 8
Метки (Все метки)

Ответ

Yukikaze, Спс конешно... Но:
1. Здесь передача происходит байтами
2. Здесь я не вижу потоков и постоянной линии передачи...
3. Как сделать обращение к функциям - я вобще понять не могу.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
        static string Connect = "Database=server;Data Source=localhost;User Id=root;Password=";
        static MySqlConnection myConnection;
        static TcpListener listener;
 
 
        static void Main(string[] args)
        {
            Console.WriteLine(Func.ToDateTime() + "Server started.");
            Console.WriteLine(@"
    в–€   в–€ в–€в–€в–€ в–€  в–€   в–€в–€в–€в–€ в–€в–€в–€   в–€   в–€ в–€в–€в–€в–€ в–€в–€в–€в–€ в–€в–€в–€в–€ в–€в–€в–€в–€ в–€в–€в–€в–€ в–€в–€в–€ в–€в–€в–€
    в–€в–€ в–€в–€  в–€  в–€в–€ в–€   в–€  в–€ в–€     в–€   в–€ в–€  в–€ в–€  в–€ в–€  в–€ в–€  в–€ в–€  в–€ в–€    в–€
    в–€ в–€ в–€  в–€  в–€ в–€в–€   в–€  в–€ в–€в–€в–€   в–€ в–€ в–€ в–€в–€в–€в–€ в–€в–€в–€в–€ в–€    в–€в–€в–€в–€ в–€в–€в–€в–€ в–€в–€в–€  в–€
    в–€   в–€  в–€  в–€  в–€   в–€  в–€ в–€     в–€в–€в–€в–€в–€ в–€  в–€ в–€ в–€  в–€  в–€ в–€ в–€  в–€  в–€ в–€    в–€
    в–€   в–€ в–€в–€в–€ в–€  в–€   в–€в–€в–€в–€ в–€      в–€ в–€  в–€  в–€ в–€ в–€  в–€в–€в–€в–€ в–€ в–€  в–€  в–€ в–€    в–€
 
                        в–€в–€в–€  в–€в–€в–€  в–€в–€в–€в–€  в–€ в–€  в–€в–€в–€  в–€в–€в–€в–€
                        в–€    в–€    в–€  в–€  в–€ в–€  в–€    в–€  в–€
                        в–€в–€в–€  в–€в–€в–€  в–€в–€в–€в–€  в–€ в–€  в–€в–€в–€  в–€в–€в–€в–€
                          в–€  в–€    в–€ в–€   в–€в–€в–€  в–€    в–€ в–€
                        в–€в–€в–€  в–€в–€в–€  в–€ в–€    в–€   в–€в–€в–€  в–€ в–€
");
        
            try
            {
                myConnection = new MySqlConnection(Connect);
                myConnection.Open();
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine(Func.ToDateTime() + "MySQL connected.");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
            catch 
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(Func.ToDateTime() + "MySQL unable connect.");
                Logs.ProgrammLog("MySQL unable connect.");
                Environment.Exit(0);
            }
            
            try
            {
                listener = new TcpListener(5000);
                listener.Start();
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine(Func.ToDateTime() + "Connect created.");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
            catch
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(Func.ToDateTime() + "Error creating connect.");
                Logs.ProgrammLog("MySQL unable connect.");
                Environment.Exit(0);
            }
            Console.Beep();
            while (true)
            {
                string userid = null;
                TcpClient client = listener.AcceptTcpClient();
                Console.WriteLine(Func.ToDateTime() + "Client Connected.");
                StreamWriter writer = new StreamWriter(client.GetStream());
                writer.AutoFlush = true;
                var reader = new StreamReader(client.GetStream());
                Thread thread = new Thread(new ThreadStart(delegate()
                {
 
                    string message = string.Empty;
                    while (true)
                    {
                        try
                        {
                            message = reader.ReadLine();
                            var result = Funtions(message + "|" + userid);
                            writer.WriteLine(result);
                            if (result == "AUTH_OK")
                            {
                                var key = message.Split('|');
                                var Values = key[1].Split('Ыћ');
                                var ToAccount = MySQL("SELECT id FROM `accounts` WHERE `username`='" + Values[0] + "'");
                                userid = ToAccount[0].ToString();
                            }
                        }
                        catch { client.Close(); Console.WriteLine(Func.ToDateTime() + "Client " + userid + " disconnected."); break; }
                    }
                }));
                thread.Start();
            }
 
                
        }
        static object[] MySQL_Result = new object[100];
        public static object[] MySQL(string command)
        {
            MySQL_Result = new object[100];
            MySqlCommand myCommand = new MySqlCommand(command, myConnection);
            MySqlDataReader MyDataReader;
            MyDataReader = myCommand.ExecuteReader();
            List<object[]> result = new List<object[]>();
            while (MyDataReader.Read())
            {
                MySQL_Result = new Object[MyDataReader.FieldCount];
                int fieldCount = MyDataReader.GetValues(MySQL_Result);
                result.Add(MySQL_Result);
            }
           
            MyDataReader.Close();
            return MySQL_Result;
        }
 
 
        public static string Funtions(string text)
        {
            //Ыћ
            var key = text.Split('|');
            var Values = key[1].Split('Ыћ');
            switch (key[0])
            {
                case "RegAccount":
                    var ToLogin = MySQL("SELECT username FROM `accounts` WHERE `username`='" + Values[0] + "'");
                    if (Convert.ToString(ToLogin[0]) != Values[0])
                    {
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Account registration: "+Values[0] + " registrated.");
                        Console.ForegroundColor = ConsoleColor.Gray;
                        MySQL("INSERT INTO `accounts`(`username`,`password`) VALUES ('" + Values[0] + "','" + Values[1] + "')");
                        
                        return "REG_OK";
                    }
                    else {
                        return "LOGIN_DETECT"; 
                        }
                        break;
                case "Login":
 
                        var MyLogin = MySQL("SELECT password FROM `accounts` WHERE `username`='" + Values[0] + "'");
                        if (Convert.ToString(MyLogin[0]) == Values[1])
                        {
                            return "AUTH_OK";
                        }
                        else
                        {
                            return "AUTH_ERROR";
                        }
                        break;
                case "MyRes":
                        var MyRes = MySQL("SELECT * FROM `accounts_resources` WHERE `id_account` = '" + key[2] + "'");
                        
                        if (Convert.ToString(MyRes[0]) == key[2])
                        {
                            var MyUnits = MySQL("SELECT * FROM `accounts_npc` WHERE `id_account` = '" + key[2] + "'");
                            MyRes[2] = 100 * (int)MyUnits[1] + (int)MyRes[2];
                            MySQL("UPDATE `accounts_resources` SET `lamber`='" + MyRes[2] + "' WHERE `id_account` = '" + key[2] + "'");
                            return MyRes[1] + "|" + MyRes[2] + "|" + MyRes[3];
                        }
                        else
                        {
                            MySQL("INSERT INTO `accounts_resources`(`id_account`, `gold`, `lamber`, `humans`) VALUES ('" + key[2] + "','0','0','0')");
                            MySQL("INSERT INTO `accounts_npc`(`id_account`) VALUES ('" + key[2] + "')");
                            return "0|0|0";
                        }
                        break;
                default:
                return "Unknown command";
                break;
 
 
            }
        }
Вот текущий вариант сервера.... И меня он практически устраивает... Есть кое что что ещё я дорабатываю... Но уже дело пошло)))

Вернуться к обсуждению:
Клиент-сервер. Как в многопользовательском чате реализовать личные сообщения
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2013, 13:49
Готовые ответы и решения:

Клиент-Сервер: как реализовать
Во общем есть Сервер на Ansi-C Задача:нужно написать клиента C# Данные поступают в...

Клиент - Сервер. Вечное ожидание сообщения
Грубый набросок. 1)Первый случай Клиент: TcpClient client = new TcpClient(); ...

Клиент-сервер: форма закрывается после второй отправки сообщения
В клиенте 2 формы. 1ая форма соединяется с сервером Создал класс Client cl.Start(IpTextBox.Text,...

Можно ли реализовать сервер и клиент в одном приложении
Вот пишу программу, обмена сообщениями между 2 приложениями. Хочу сделать что бы каждое приложение...

Клиент-Сервер: приватные сообщения в чате
Добрый вечер форумчане. Делая приложения Клиент-Сервер на чистых сокетах, столкнулся с несколькими...

8
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru