Для школьного задания мы должны создать программу чата клиент-сервер на C #. Раньше я никогда не общался в сети, поэтому это меня очень смущает. Я прочитал книгу о сетевом взаимодействии на C # и смог создать очень простой чат, который работает с использованием двоичных устройств чтения и записи и сокета TCP. Однако для назначения я должен сделать список клиентов всех подключенных пользователей. Теперь, как бы я сделал так, чтобы клиент считывал поток только для списка, когда кто-то отключается или подключается к серверу. Я мог бы сделать так, чтобы клиенты всегда загружали новый список, но я чувствую, что отправляется много избыточных данных.
Кстати, я запутался в том, что клиент / сервер знает, что представляют собой данные в потоке. Пока у меня есть только строка, которая отправляется через поток, который представляет сообщение. Есть ли способ прикрепить какую-либо подпись или что-то к отправляемым данным, чтобы сервер или клиент знали, что эти конкретные данные - это имя пользователя или, возможно, сообщение для отображения.
Edit:
У меня проблемы с потоком. У меня есть метод, который работает в своем собственном потоке, который всегда проверяет отправляемую информацию. Это список для строки, которая является сообщением для отображения сообщения, и для списка, содержащего подключенных пользователей. Проблема в том, что порядок отправки данных не всегда в согласованном порядке. Иногда сообщение является первым, другие - списком, а иногда - единственным сообщением в потоке. Есть ли способ сказать, какие данные читаются? Вот мой слушатель на стороне клиента.
private void incoming()
{
while (true)
{
try
{
string read = reader.ReadString();
if (read.Length > 0)
lbOutput.Items.Add(read);
lbUsers.Items.Clear();
List<string> users = (List<string>)binaryFormatter.Deserialize(stream);
foreach (string user in users)
lbUsers.Items.Add(user.ToString());
}
catch { lbOutput.Items.Add("Error reading the stream"); }
}