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();
}
}
}
}