www.pudn.com > FileTranslate.rar > FileReceiver.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 FileReceiver 
	{ 
		private int startPortNo; 
		private int portNo; 
		private int bufferSize; 
		private int threadCount; 
		private string fileName; 
		private Int64 fileLength; 
		private string saveAs; 
		private TcpListener tcpListerer; 
		public  Thread[] workers; 
		private Receiver[] receivers; 
		private FileStream fs; 
 
		public FileReceiver(int startPortNo,int bufferSize, string saveAs) 
		{ 
			this.bufferSize = bufferSize; 
			this.saveAs = saveAs; 
			this.tcpListerer = new TcpListener(IPAddress.Any, startPortNo); 
			if (!Directory.Exists(saveAs)) 
				Directory.CreateDirectory(saveAs); 
		} 
		public void beforeReceive() 
		{ 
			tcpListerer.Start(); 
			while (!tcpListerer.Pending()) 
				Thread.Sleep(100); 
 
			TcpClient tcpClient = tcpListerer.AcceptTcpClient(); 
			//tcpClient.NoDelay = true; 
			tcpClient.ReceiveTimeout = 30000; 
			tcpClient.ReceiveBufferSize = 8192 * 8; 
			BinaryReader reader = new BinaryReader(tcpClient.GetStream()); 
			this.fileName = reader.ReadString(); 
			this.fileLength = reader.ReadInt64(); 
			this.portNo = reader.ReadInt32(); 
			this.threadCount = reader.ReadInt32(); 
			workers = new Thread[threadCount]; 
			receivers = new Receiver[threadCount]; 
			fs = File.Create(saveAs + "\\" + fileName, bufferSize, FileOptions.RandomAccess); 
			fs.SetLength(fileLength); 
			fs.Seek(0, SeekOrigin.Begin); 
			//fs.Close(); 
			fs.Close(); 
			fs = new FileStream(saveAs + "\\" + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
			BinaryWriter writer = new BinaryWriter(tcpClient.GetStream()); 
			Boolean res=true; 
			Console.WriteLine("aa"); 
			writer.Write(res); 
			Console.WriteLine("bb"); 
		} 
 
		public void startReceive() 
		{ 
			beforeReceive(); 
			int iIndex; 
			for (iIndex = 0; iIndex < threadCount; ++iIndex) 
			{ 
				receivers[iIndex] = new Receiver(portNo + iIndex, bufferSize, saveAs,fs); 
				workers[iIndex] = new Thread(new ThreadStart(receivers[iIndex].receiveFile)); 
				workers[iIndex].IsBackground = true; 
				workers[iIndex].Start(); 
			} 
		} 
 
	} 
}