www.pudn.com > FileTranslate.rar > Receiver.cs


using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Threading; 
using System.Net; 
using System.Net.Sockets; 
using System.IO; 
 
namespace TransReceiver 
{ 
 
	class Receiver 
	{ 
		private int portNo; 
		private int bufferSize; 
		private string saveAs; 
		private TcpListener tcpListerer; 
		private FileStream fs; 
 
		public Receiver(int portNo, int bufferSize, string saveAs,FileStream fs) 
		{ 
			this.portNo = portNo; 
			this.bufferSize = bufferSize; 
			this.saveAs = saveAs; 
			if (!Directory.Exists(saveAs)) 
				Directory.CreateDirectory(saveAs); 
			tcpListerer = new TcpListener(IPAddress.Any, portNo); 
			this.fs = fs; 
		} 
 
		public void setStatus(string msg) 
		{ 
			Console.WriteLine(msg); 
		} 
 
		public void receiveFile() 
		{ 
			try 
			{ 
				setStatus("start listening..."); 
				try 
				{ 
					tcpListerer.Start(); 
				} 
				catch (Exception e) 
				{ 
					setStatus("error1:"+e.ToString()); 
				} 
				try 
				{ 
					setStatus("waiting for incoming connection..."); 
					while (!tcpListerer.Pending()) 
						Thread.Sleep(100); 
 
					TcpClient tcpClient = tcpListerer.AcceptTcpClient(); 
					tcpClient.NoDelay = false; 
					tcpClient.ReceiveTimeout = 30000; 
					tcpClient.ReceiveBufferSize = 8192 * 8; 
					BinaryReader reader = new BinaryReader(tcpClient.GetStream()); 
 
					try 
					{ 
						string filename = reader.ReadString(); 
						Int64 total = reader.ReadInt64(); 
						setStatus("get request:filename is :" + filename + " and filesize is :" + total.ToString() + " byte"); 
						string filePath = saveAs + "\\" + filename; 
						setStatus("receiving file..."); 
						//FileStream  
						//fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
						fs = File.Create(filePath); 
						try 
						{ 
							byte[] buffer = new byte[bufferSize]; 
							int len; 
							Int64 filePos; 
							while (total > 0) 
							{ 
								//filePos = reader.ReadInt64(); 
								//Console.WriteLine(filePos); 
								//setStatus(filePos.ToString()); 
								//fs.Seek(filePos, SeekOrigin.Begin); 
								len = reader.Read(buffer, 0, bufferSize); 
								if (len == 0) throw new IOException("sender terminated!"); 
								fs.Write(buffer, 0, len); 
								total -= len; 
							} 
							setStatus("receiving completed! waiting for another connection..."); 
							Thread.CurrentThread.Abort(); 
						} 
						catch (Exception e) 
						{ 
							setStatus("error2:" + e.ToString()); 
						} 
						finally 
						{ 
							//fs.Close(); 
						} 
					} 
					catch (Exception ex) 
					{ 
						setStatus("error3:" + ex.Message); 
					} 
					finally 
					{ 
						try { reader.Close(); } 
						catch { } 
						try { tcpClient.Close(); } 
						catch { } 
					} 
				} 
				catch (Exception ex) 
				{ 
					setStatus("error4:" + ex.ToString()); 
				} 
				finally 
				{ 
 
				} 
			} 
			catch (Exception ee) 
			{ 
				setStatus("error5:" + ee.ToString()); 
			} 
			finally 
			{ 
			} 
		} 
 
	} 
}