/// <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; }
/// <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; }
/// <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; } }
/// <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; } }