Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Вывести все возможные пары целых чисел https://www.cyberforum.ru/ csharp-beginners/ thread1433717.html
Здравствуйте, нужна помощь с задачкой. Необходимо вывести все возможные пары целых чисел, где целые числа заключены в диапазоне от 0 до n (пусть будет 9). При этом первое число в паре должно быть...
C# Перевести функцию с DELPHI
function Parsing(T_, ForS, _T: string): string; var a, b:integer; begin Result := ''; if (T_='') or (ForS='') or (_T='') then Exit; a:=Pos(T_, ForS); if a=0 then Exit else a:=a+Length(T_); ,...
Смена обоев рабочего стола C#
Всем привет. Сегодня с друзьями тестили на Windows 7 и 8 кое-что. В результате выяснилось, что следующий код работает только на восьмёрке. private static extern Int32...
C# Найти обратную матрицу методом Гаусса - ошибки в коде Друзья, помогите, пожалуйста, найти ошибку в программе. Пытаюсь найти обратную матрицу методом Гаусса, но результат не верный уже после прямого хода. Проверяю код на матрице , никак не пойму в чем... https://www.cyberforum.ru/ csharp-beginners/ thread1433654.html
C# Игра жизнь с установкой начальных квадратиков https://www.cyberforum.ru/ csharp-beginners/ thread1433448.html
Помогите пожалуйста с реализацией игры "Жизнь" с установкой начальных живых клеток. у меня есть вариант без установки using System; static class GameLife { private static int Count(int...
C# Как отправить широковещательное сообщение, используя Net.Socket
Как отправлять сообщение не последнему подключившемуся а всем или на выбор ? и как отключить от сервера определенного клиента ? class Program { static void Main(string args) ...
Нужен пример, где отсутствие синхронизации потоков приводит к вычислению неверного результата C#
Не могли бы вы мне помочь составить или найти пример кода, показывающего как отсутствие синхронизации потоков приводит к вычислению неверного результата? Нашел только на Java пример.
C# Несколько цифр для case в switch'e Решил объеденить два условия для case и сделать так: case 1, 3:{ } case2: ... Но меня очень удивило, что компилятор сругался, что нельзя так делать. В чём проблема? https://www.cyberforum.ru/ csharp-beginners/ thread1433306.html
C# Сортировка методом двухпутевых вставок https://www.cyberforum.ru/ csharp-beginners/ thread1433279.html
Ребят,кто-нибудь знает алгоритм сортировки методом двухпутевых вставок?Искал в инете,но ничего толкового не нашел
C# Обход бинарного дерева без рекурсии Всем привет. Помогите пожалуйста. Есть класс BinaryTree. С его помощью создается дерево, реализован рекурсивный обход, и итерационный вывод - метод show. Я писал алгоритм вывода сам. Он получился... https://www.cyberforum.ru/ csharp-beginners/ thread1433233.html
[Bicycle Reinventor]
322 / 260 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
29.04.2015, 13:46 0

В массив выводить данные-id клиента, данные серверу и данные, отправленные сервером

29.04.2015, 13:46. Просмотров 1408. Ответов 8
Метки (Все метки)

Лучший ответ Сообщение было отмечено best_vint как решение

Решение

Вот код, повыбрасывал всё лишнее.
Кликните здесь для просмотра всего текста

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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
    class Server : BackgroundWorker
    {
        private TcpListener listener;
        private List<Connection> connections;
        private bool exit;
 
        public Server(int port)
        {
            listener = new TcpListener(IPAddress.Any, port);
            listener.Start();
        }
 
        private void Message(string message)
        {
            Console.Write(DateTime.Now.ToLongTimeString() + ": " + message);
        }
 
        public void Broadcast(string message)
        {
            for (int i = 0; i < connections.Count; i++)
            {
                if (connections[i].currentState == Connection.State.Authorized)
                    connections[i].Write(message);
            }
        }
 
        protected override void OnDoWork(DoWorkEventArgs e)
        {
            Message("Сервер стартовал\n");
 
            while (true)
            {
                Thread.Sleep(1);
                if (exit) return;
 
                try
                {
                    if (listener.Pending())
                    {
                        TcpClient client = listener.AcceptTcpClient();
                        Message("Подключился клиент: " + client.Client.RemoteEndPoint.ToString() + "\n");
                        Connection c = new Connection(client, this);
                        connections.Add(c);
                        c.onBroadcast += new EventHandler<ObjectEventArgs>(c_onBroadcast);
                        c.onClose += new EventHandler<ObjectEventArgs>(c_onClose);
                    }
                }
                catch (Exception err)
                {
                    Message("Сервер сообщает об ошибке: " + err.Message + "\n");
                    continue;
                }
            }
        }
 
        void c_onClose(object sender, ObjectEventArgs e)
        {
            Connection c = sender as Connection;
            c.Exit();
            connections.Remove(c);
        }
 
        void c_onBroadcast(object sender, ObjectEventArgs e)
        {
            Broadcast(e.value.ToString());
        }
 
        public void Exit()
        {
            exit = true;
        }
    }
 
    class Connection
    {
        public enum State
        {
            WaitForLogin = 0,
            WaitForPassword = 1,
            Authorized = 2
        }
        public State currentState { get; private set; }
        private Server server;
        private TcpClient client;
        private NetworkStream stream;
        private Thread communicatingThread;
        private Random rnd;
 
        private byte[] sessionID;
        private string ip;
        private string port;
        private int wrongPasswordsAttempt;
        private bool exit;
 
        public event EventHandler<ObjectEventArgs> onBroadcast = delegate { };
        public event EventHandler<ObjectEventArgs> onClose = delegate { };
 
        public Connection(TcpClient client, Server server)
        {
            currentState = State.WaitForLogin;
            this.server = server;
            this.client = client;
            ip = ((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString();
            port = ((IPEndPoint)client.Client.RemoteEndPoint).Port.ToString();
            stream = client.GetStream();
            communicatingThread = new Thread(new ThreadStart(Communicating));
            communicatingThread.IsBackground = true;
            communicatingThread.Start();
            rnd = new Random();
        }
 
        private void Message(string message)
        {
            Console.Write(DateTime.Now.ToLongTimeString() + ": " + message);
        }
 
        private void Communicating()
        {
            string input = String.Empty;
            byte[] message = new byte[0];
 
            Message("Поток соединения " + ip + ":" + port + " стартовал\n");
 
            while (true)
            {
                if (exit) break;
                Thread.Sleep(1);
 
                try
                {
                    if (stream.CanRead)
                    {
                        message = new byte[0];
                        if (stream.DataAvailable)
                        {
                            byte[] buffer = new byte[65535];
 
                            using (MemoryStream messageStream = new MemoryStream())
                            {
                                while (stream.DataAvailable)
                                {
                                    int bytesRead = stream.Read(buffer, 0, buffer.Length);
                                    messageStream.Write(buffer, 0, bytesRead);
                                }
 
                                message = messageStream.ToArray();
                            }
                        }
 
                        if (message.Length > 0)
                        {
                            switch (currentState)
                            {
                                case State.WaitForLogin:
                                    input = Encoding.UTF8.GetString(message);
                                    CheckLogin(input);
                                    break;
 
                                case State.WaitForPassword:
                                    CheckPassword(message);
                                    break;
 
                                case State.Authorized:
                                    input = Encoding.UTF8.GetString(message);
                                    Message(String.Format("[{0} {1}:{2}]: {3}\n", currentAccount.Login, ip, port, input));
                                    onBroadcast(this, new ObjectEventArgs(String.Format("[{0}]: {1}\n", currentAccount.Login, input)));
                                    break;
 
                                default:
                                    throw new Exception(String.Format("Соединение оказалось в неизвестном состоянии и будет закрыто\n"));
                            }
                        }
                    }
                    if (client.Client.Poll(0, SelectMode.SelectRead))
                    {
                        byte[] checkConn = new byte[1];
                        if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0)
                        {
                            Message("Клиент " + ip + ":" + port + " отключился\n");
                            break;
                        }
                    }
                }
                catch (Exception err)
                {
                    Message(String.Format("Соединение {0}:{1} сообщает об ошибке:{2}\n", ip, port, err.Message));
                    break;
                }
            }
 
            Message("Соединение " + ip + ":" + port + " закрывается\n");
            stream.Close();
            client.Close();
            Message("Поток соединения " + ip + ":" + port + " завершился\n");
            onClose(this, null);
        }
 
        public void Write(string message)
        {
            try
            {
                byte[] bytes = Encoding.UTF8.GetBytes(message);
                stream.Write(bytes, 0, bytes.Length);
            }
            catch (IOException) { return; }
        }
 
        public void Write(byte[] buffer)
        {
            try
            {
                stream.Write(buffer, 0, buffer.Length);
            }
            catch (IOException) { return; }
        }
 
        public void Exit()
        {
            exit = true;
        }
    }
 
 
    class ObjectEventArgs : EventArgs
    {
        public object value { get; private set; }
 
        public ObjectEventArgs(object arg)
        {
            value = arg;
        }
    }

Берите и добавляйте свою функциональность.

Вернуться к обсуждению:
В массив выводить данные-id клиента, данные серверу и данные, отправленные сервером
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2015, 13:46
Готовые ответы и решения:

Проверка на стороне сервера, что клиент обработал отправленные данные
Есть клиент и есть сервер, общаются по именованому каналу (named pipe) Проблема: нужно сделать...

Как получить данные от клиентов socket сервером?
Вот, что я сделал: IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); ...

Описать структуру с полями, считать данные из текстового файла, вывести данные, подсчитать количество
Доброе утро. С C# я знаком весьма посредственно, однако появилась необходимость выполнить на нем...

Возможно ли передавать синхронно данные между клиентом и сервером?
Всем привет. Пытаюсь сделать отдельный сервер для Unity3D. Мне нужно, чтобы клиент передавал данные...

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