Esempio n. 1
0
        internal static void SendFiles(NetIncomingMessage msg)
        {
            Messages message = Messages.FromByteArray(msg.Data);
            Guid id = new Guid((string)message.Data);

            //Messages outGoingMessage = new Messages();
            //outGoingMessage.MessageType = Message.RecieveFile;
            //NetOutgoingMessage outgoingMessage2 = server.CreateMessage();
            //outgoingMessage2.Write(outGoingMessage.ToByteArray());
            //server.SendUnconnectedMessage(outgoingMessage2, msg.SenderEndPoint);

            Udt.Socket socket = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream);
            Udt.StdFileStream fs = new Udt.StdFileStream(userFileList.GetFilePathFromGuid(id), FileMode.Open);
            {
                socket.BlockingSend = true;
                socket.Connect(msg.SenderEndPoint.Address, 10000);
                // Send the file length, in bytes
                socket.Send(BitConverter.GetBytes(fs.Length), 0, sizeof(long));
                // Send the file contents
                socket.SendFile(fs);

            }
        }
Esempio n. 2
0
 private void ReceiveFileButton_Click(object sender, System.Windows.RoutedEventArgs e)
 {
     DisableClientServerButtons();
     byte[] buffer = new byte[sizeof(long)];
     _socket.ListenOnce();
     _socket.Read(buffer, sizeof(long));
     long length = BitConverter.ToInt64(buffer, 0);
     Status.Text = Status.Text + " (" + length + " bytes)";
     // Receive the file contents (path is where to store the file)
     var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads", "FileSend.bin");
     Udt.StdFileStream fs = new Udt.StdFileStream(path, FileMode.Create);
     Stopwatch sw = new Stopwatch();
     sw.Start();
     var fsBuffer = new byte[16834];
     int totalRead = 0;
     int read = totalRead = _socket.Read(fsBuffer, 16834);
     while (totalRead < length)
     {
         fs.Write(fsBuffer, 0, read);
         totalRead += read = _socket.Read(fsBuffer, (int)((length - totalRead > 16834) ? 16834 : length - totalRead));
     }
     fs.Close();
     _socket.Close();
     sw.Stop();
     Status.Text = "File Received, " + length + " bytes in " + sw.Elapsed.TotalSeconds + " seconds (" + (sw.Elapsed.TotalSeconds == 0 ? "?" : (length / 1024 / sw.Elapsed.TotalSeconds).ToString()) + "kBps)";
 }
Esempio n. 3
0
 private void SendFileButton_Click(object sender, System.Windows.RoutedEventArgs e)
 {
     try
     {
         var fileDialog = new OpenFileDialog();
         Nullable<bool> result = fileDialog.ShowDialog(this);
         if (result == true)
         {
             DisableClientServerButtons();
             string filename = fileDialog.FileName;
             Udt.StdFileStream fs = new Udt.StdFileStream(filename, FileMode.Open);
             byte[] buffer = new byte[16834];
             _socket.Connect();
             Status.Text = "Sending size " + fs.Length;
             _socket.Send(BitConverter.GetBytes(fs.Length), sizeof(long));
             int read = fs.Read(buffer, 0, 16834);
             Status.Text = "Sending filename " + filename;
             while (read > 0)
             {
                 _socket.Send(buffer, read);
                 read = fs.Read(buffer, 0, 16834);
             }
             fs.Close();
             _socket.Close();
             Status.Text = "Sent " + filename;
             SendFileButton.IsEnabled = false;
         }
     }
     catch (Exception ex)
     {
         Dispatcher.Invoke(new Action(() => ErrorBlock.Text = ex.Message + "\n" + ex.StackTrace));
     }
 }
Esempio n. 4
0
        public void SendFile_stream()
        {
            ManualResetEvent serverDoneEvent = new ManualResetEvent(false);
            ManualResetEvent clientDoneEvent = new ManualResetEvent(false);
            int port = _portNum++;
            string path = GetFile("The quick brown fox jumped over the lazy dog");

            var serverTask = Task.Factory.StartNew(() =>
            {
                using (Udt.Socket server = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream))
                {
                    server.Bind(IPAddress.Loopback, port);
                    server.Listen(1);

                    using (Udt.Socket accept = server.Accept())
                    using (Udt.StdFileStream file = new Udt.StdFileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                    {
                        accept.SendFile(file);

                        serverDoneEvent.Set();
                        Assert.IsTrue(clientDoneEvent.WaitOne(1000));
                    }
                }
            });

            using (Udt.Socket client = new Udt.Socket(AddressFamily.InterNetwork, SocketType.Stream))
            {
                byte[] buffer = new byte[1024];

                client.Connect(IPAddress.Loopback, port);
                Assert.AreEqual(44, client.Receive(buffer));

                CollectionAssert.AreEqual(File.ReadAllBytes(path), buffer.Take(44));

                clientDoneEvent.Set();
                Assert.IsTrue(serverDoneEvent.WaitOne(1000));
            }

            serverTask.Wait();
        }