示例#1
0
        // отправление сообщения
        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);
                }
            });
        }
示例#2
0
        // прием сообщения
        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);
                }
            });
        }