Как реализовать список подключенных пользователей на всех клиентах TCP - PullRequest
0 голосов
/ 24 апреля 2018

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

Вещи пробовали: Я попытался преобразовать массив списка в одну переменную, которая соединяет все элементы в массиве, используя запятую ",". Затем я отправляю переменную всем клиентам, используя метод широковещания, который отображает сообщение.

Мой вопрос заключается в том, что если есть лучший способ сделать это.

Код, который я пробовал, показан ниже:

Внутренний сервер:

NetworkStream stream= tcpclient.GetStream();  
var bytes= stream.Read(bytes, 0, tcpclient.ReceiveBufferSize);
nameUser= Encoding.ASCII.GetString(bytes, 0, bytes);

var users= String.Join("x", userList);
Console.WriteLine("Connected users " + users);
ChatServer.Broadcast(users, nameUser, false);

Затем передается сообщение, которое в данном случае является «пользователи».

На клиенте:

byte[] bytes = new byte[10025];
stream= Client.GetStream();
var byte= Netstream.Read(bytes, 0, (int)Client.ReceiveBufferSize);
string msg= Encoding.ASCII.GetString(bytes, 0, byte);
if (msg.Contains("x") == true)
   {
    elements = msg.Split(new[] { 'x' });
   }

1 Ответ

0 голосов
/ 24 апреля 2018

Использование String.Contains для обнаружения подобного сообщения - очень плохая идея.

Вы можете рассмотреть несколько старших байтов (или символов) в вашем сообщении, которые соответствуют типу сообщения. Например, если вы назначите для этого 5 символов, вы можете начать каждое сообщение о пользователях в сети с USERS. Вы должны построить некоторые другие соглашения для этого. Но я думаю, что вы также можете найти какие-то стандарты для передачи этих сообщений.

Кроме того, вместо символов чаще используется byte[]. Таким образом, вы могли бы предположить стандартом, что ваши первые, например, четыре байта связаны с типом сообщения, а ваши, например, вторые два байта показывают идентификатор пользователя и так далее. Вы можете использовать short, int или long для кодов, связанных с этими вещами, и использовать Enumeration types для их организации.

Обратите внимание, что когда вы используете первое число байтов для определения типа сообщения и других вещей, вы можете написать свой дополнительный код способом, который зависит от этих характеристик сообщения. Что бы вы ни делали, не используйте Contains; сообщение может содержать что угодно, вы не можете определить его тип!

...