// отправление сообщения private async void Send() { await Task.Run(() => { try { // Инициализируем новый экземпляр класса UdpClient и устанавливаем удаленный узел using (UdpClient client = new UdpClient(IP_my, 49185)) { client.EnableBroadcast = true; // Создадим поток, резервным хранилищем которого является память. MemoryStream stream = new MemoryStream(); // BinaryFormatter сериализует и десериализует объект в двоичном формате BinaryFormatter formatter = new BinaryFormatter(); Date_massege m = new Date_massege(); m.Name = Name; // текст сообщения m.Messege = Messege; // имя пользователя m.Time = DateTime.Now.ToString(); formatter.Serialize(stream, m); byte[] arr = BitConverter.GetBytes((Int32)Type_pacet.messege); byte[] arr2 = stream.ToArray(); byte[] arr1 = arr.Concat(arr2).ToArray(); client.Send(arr1, arr1.Length); // client.Send(arr, arr.Length); client.Close(); stream.Close(); } } catch (Exception ex) { // MessageBox.Show("Отправитель: " + ex.Message); } }); }
// прием сообщения private async void WaitClientQuery() { await Task.Run(() => { try { using (UdpClient client = new UdpClient(49185 /* порт */)) { client.EnableBroadcast = true; while (true) { try { IPEndPoint remote = null; byte[] arr = client.Receive(ref remote); if (arr.Length > 0) { MemoryStream stream = new MemoryStream(arr); byte[] command_b = new byte[4]; BinaryFormatter formatter = new BinaryFormatter(); // byte[] arr1 = (byte[])formatter.Deserialize(stream); for (int i = 0; i < 4; i++) { command_b[i] = arr[i]; } Type_pacet My_command = (Type_pacet)(BitConverter.ToInt32(command_b, 0)); stream.Dispose(); // string my_str = (string)formatter.Deserialize(stream); switch (My_command) { case Type_pacet.messege: { byte[] arr2 = new byte[arr.Length - 4]; Array.Copy(arr, 4, arr2, 0, arr.Length - 4); stream = new MemoryStream(arr2); formatter = new BinaryFormatter(); Date_massege m = (Date_massege)formatter.Deserialize(stream); uiContext.Send(d => List_messege.Add(m), null); } break; case Type_pacet.update: { byte[] arr2 = new byte[arr.Length - 4]; Array.Copy(arr, 4, arr2, 0, arr.Length - 4); stream = new MemoryStream(arr2); formatter = new BinaryFormatter(); User m1 = (User)formatter.Deserialize(stream); bool isList = true; foreach (var i in List_user) { if (i.Name == m1.Name) { isList = false; break; } } if (isList) { uiContext.Send(d => List_user.Add(m1), null); } } break; case Type_pacet.connect: { byte[] arr2 = new byte[arr.Length - 4]; Array.Copy(arr, 4, arr2, 0, arr.Length - 4); stream = new MemoryStream(arr2); formatter = new BinaryFormatter(); User m1 = (User)formatter.Deserialize(stream); uiContext.Send(d => List_user.Add(m1), null); stream.Dispose(); stream = new MemoryStream(); formatter.Serialize(stream, My_acc); byte[] arr3 = BitConverter.GetBytes((Int32)Type_pacet.update); byte[] arr4 = stream.ToArray(); byte[] arr5 = arr3.Concat(arr4).ToArray(); using (UdpClient client1 = new UdpClient(IP_my, 49185)) { client1.EnableBroadcast = true; client1.Send(arr5, arr5.Length); client1.Close(); } } break; case Type_pacet.exit: { byte[] arr2 = new byte[arr.Length - 4]; Array.Copy(arr, 4, arr2, 0, arr.Length - 4); stream = new MemoryStream(arr2); formatter = new BinaryFormatter(); User m1 = (User)formatter.Deserialize(stream); for (var i = 0; i < List_user.Count; i++) { if (List_user[i].Name == m1.Name) { uiContext.Send(d => List_user.RemoveAt(i), null); } } } break; } stream.Dispose(); stream.Close(); } } catch (Exception ex) { MessageBox.Show("Получатель: " + ex.Message); } } } } catch (Exception ex) { MessageBox.Show("Получатель: " + ex.Message); } }); }