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
{
}
}
}
}