2007年12月20日 星期四

.NET 2.0 Framework 快速傳輸檔案的方法

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace TestSendFile
{
class Program
{
static void Main(string[] args)
{
if (args.Length == 0)
{
ShowHelp();
return;
}
switch (args[0])
{
case "server":
Socket serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint serverip = new IPEndPoint(IPAddress.Any, 9888);
serversocket.Bind(serverip);
serversocket.Listen(10);
// max 10 pending connection.
Console.WriteLine("press Ctrl-C to stop");
while(true)
{
Socket newconnection = serversocket.Accept();
DateTime beginreceive = DateTime.Now;
// receive file then close.
string filename = Guid.NewGuid().ToString() + ".dat";
Console.WriteLine("Begin receiving " + filename);
using (FileStream fs = new FileStream(filename, FileMode.Create))
{
byte[] buffer = new byte[4096];
while (true)
{
int readbytes = newconnection.Receive(buffer);
if (readbytes == 0)
break;
fs.Write(buffer, 0, readbytes);
}
newconnection.Close();
Console.WriteLine(filename + " transfered , cost " + (DateTime.Now - beginreceive).ToString());
}
}
case "client":
IPHostEntry hostInfo = Dns.GetHostEntry(args[1]);
IPAddress hostip = null;
foreach (IPAddress ips in hostInfo.AddressList)
{
if (ips.AddressFamily == AddressFamily.InterNetwork)
{
hostip = ips;
break;
}
}
IPEndPoint host = new IPEndPoint(hostip, 9888);
Socket clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientsocket.Connect(host);
clientsocket.SendFile(args[2]);
clientsocket.Close();
break;
}
}

static void ShowHelp()
{
Console.WriteLine("TestSendFile server");
Console.WriteLine("TestSendFile client [servername] [send filename]");
}
}
}

 

HEMiDEMi Technorati Del.icio.us MyShare個人書籤 Yahoo

0 意見: