Пример #1
0
        public async void SendFile(FileInfo FileInfo)
        {
            await Task.Run(() =>
            {
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                IPEndPoint GroupEndPoint        = new IPEndPoint(GroupIp, PortFileChat);


                using (FileStream fs = new FileStream(FileInfo.FullName, FileMode.Open, FileAccess.Read))
                    using (BinaryReader br = new BinaryReader(fs))
                    {
                        MemoryStream ms = new MemoryStream();

                        byte[] data  = br.ReadBytes(1024);
                        FilePiece fp = new FilePiece(FileInfo, data);
                        binaryFormatter.Serialize(ms, fp);
                        Thread.Sleep(10);

                        while (data.Length > 0)
                        {
                            ClientSend.Send(ms.GetBuffer(), (int)ms.Length, GroupEndPoint);
                            data    = br.ReadBytes(1024);
                            fp.Data = data;
                            ms      = new MemoryStream();
                            binaryFormatter.Serialize(ms, fp);
                            Thread.Sleep(10);
                        }
                        Thread.Sleep(10);
                        ms      = new MemoryStream();
                        fp.Data = new byte[] { 1, 2, 3 };
                        binaryFormatter.Serialize(ms, fp);
                        ClientSend.Send(ms.GetBuffer(), (int)ms.Length, GroupEndPoint);
                    }
            });
        }
Пример #2
0
        private void WriteReceivedBytes(FilePiece deserialized)
        {
            string filepath = deserialized.FileInfo.Name;

            Debug.WriteLine(filepath);
            using (FileStream fs = new FileStream(filepath, FileMode.Append, FileAccess.Write))
            {
                if (deserialized.Data != null)
                {
                    fs.Write(deserialized.Data, 0, deserialized.Data.Length);
                }
                Debug.WriteLine(fs.Length.ToString());
            }
        }
Пример #3
0
        private async void Receive()
        {
            BinaryFormatter bf = new BinaryFormatter();

            while (!cancellationTokenSource.IsCancellationRequested)
            {
                try
                {
                    UdpReceiveResult result = await ClientReceive.ReceiveAsync();

                    using (var inputMemoryStream = new MemoryStream(result.Buffer))
                    {
                        FilePiece deserialized = bf.Deserialize(inputMemoryStream) as FilePiece;

                        if (deserialized.Data.Length == 3)
                        {
                            Message message = new Message()
                            {
                                Address = result.RemoteEndPoint.Address,
                                Data    = $"File: {deserialized.FileInfo.Name}"
                            };
                            OnMessage(message);
                        }
                        else
                        {
                            WriteReceivedBytes(deserialized);
                        }
                    }
                }
                catch (ObjectDisposedException)
                {
                    Debug.WriteLine("FileChat Socket closed");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }