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); } }); }
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()); } }
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()); } } }