示例#1
0
 /// <summary>
 /// Constructor, specify server ip address/name and port
 /// </summary>
 /// <param name="server">Server Name or IP Address</param>
 /// <param name="port">Port to connect to</param>
 public MessageClient(string server, int port)
 {
     this._port  = port;
     _server     = server;
     _running    = false;
     _bufferSize = FileBufferSize.Size4096;
 }
示例#2
0
 /// <summary>
 /// Constructor, used for localhost only
 /// </summary>
 /// <param name="port">Port to connect to</param>
 public MessageClient(int port)
 {
     _port             = port;
     _server           = "localhost";
     _running          = false;
     _ignoreBroadcasts = false;
     _bufferSize       = FileBufferSize.Size4096;
 }
示例#3
0
        /// <summary>
        /// Sends a file to a tcp client from the sever
        ///
        /// Server Side Only
        /// </summary>
        /// <param name="client">ConnectedClient object representing the client</param>
        /// <param name="FileName">Full Path/Name of file to be sent</param>
        /// <param name="BufferSize">Size of buffer used to receive file</param>
        internal void SendFile(ConnectedClient client, string FileName, FileBufferSize BufferSize)
        {
            byte[]        SendingBuffer = null;
            NetworkStream netstream     = client.Client.GetStream();

            FileStream fStream = new FileStream(FileName, FileMode.Open, FileAccess.Read);

            try
            {
                DateTime start   = DateTime.Now;
                int      packets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(fStream.Length) /
                                                                Convert.ToDouble((uint)BufferSize)));

                uint totalLength = (uint)fStream.Length;
                uint currentPacketLength;
                uint totalSent = 0;

                for (int i = 0; i < packets; i++)
                {
                    if (totalLength > (uint)BufferSize)
                    {
                        currentPacketLength = (uint)BufferSize;
                        totalLength        -= currentPacketLength;
                    }
                    else
                    {
                        currentPacketLength = totalLength;
                    }

                    SendingBuffer = new byte[currentPacketLength];
                    totalSent    += (uint)fStream.Read(SendingBuffer, 0, (int)currentPacketLength);
                    netstream.Write(SendingBuffer, 0, (int)SendingBuffer.Length);

                    using (TimedLock.Lock(_messageLockObject))
                    {
                        client.LastSent = DateTime.Now;
                    }

                    TimeSpan span  = DateTime.Now - start;
                    double   speed = span.Seconds > 0 && totalSent > 0 ? totalSent / span.Seconds : 0.00;
                    RaiseFileReceived(this, new TransferFileEventArgs(FileName, totalSent,
                                                                      (uint)fStream.Length, span, speed, client.ClientID));
                }
            }
            finally
            {
                fStream.Close();
                fStream.Dispose();
                fStream = null;
            }
        }
示例#4
0
        /// <summary>
        /// Receives a file via tcp socket and saves it to specified location
        ///
        /// Client Side Only
        /// </summary>
        /// <param name="client">Client Tcp socket</param>
        /// <param name="FileName">Full Path/Name of file to be saved</param>
        /// <param name="FileSize">Size of file being transferred</param>
        /// <param name="BufferSize">Size of buffer used to receive file</param>
        internal void ReceiveFile(TcpClient client, string FileName, ulong FileSize, FileBufferSize BufferSize)
        {
            NetworkStream netStream = client.GetStream();

            byte[] receivedBuffer = null;

            FileStream fStream = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Write);

            try
            {
                DateTime start   = DateTime.Now;
                int      packets = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(FileSize) / Convert.ToDouble(BufferSize)));

                ulong totalLength = (uint)FileSize;
                ulong currentPacketLength;
                ulong totalReceived = 0;

                for (int i = 0; i < packets; i++)
                {
                    if (totalLength > (ulong)BufferSize)
                    {
                        currentPacketLength = (ulong)BufferSize;
                        totalLength        -= currentPacketLength;
                    }
                    else
                    {
                        currentPacketLength = totalLength;
                    }

                    receivedBuffer = new byte[currentPacketLength];
                    totalReceived += (uint)netStream.Read(receivedBuffer, 0, (int)currentPacketLength);
                    fStream.Write(receivedBuffer, 0, (int)receivedBuffer.Length);

                    TimeSpan span  = DateTime.Now - start;
                    double   speed = span.Seconds > 0 && totalReceived > 0 ? totalReceived / (ulong)span.Seconds : 0;
                    RaiseFileReceived(this, new TransferFileEventArgs(FileName, totalReceived, FileSize, span, speed));
                }
            }
            finally
            {
                fStream.Close();
                fStream.Dispose();
                fStream = null;
            }
        }