client1 Articles

  1. 2007/01/13 간단한 파일 전송 프로그램. (1)

서버에서 TCP를 이용하여 파일을 하나 지정 받아서 대기 하고 있는다. 그런후 클라이언트에서 접속을 하게 되면 그 파일을 전송 받고, 클라이언트 프로그램에서는 파일을 받아 기록하게되는 간단한 소스 이다.

using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
public class FileServer
{
private FileStream file;
private NetworkStream ns;
private IPAddress ipAddress;
private TcpListener listener;
private Thread sender;
private TcpClient client = null;
private long sendSize = 0;
public FileServer(string f)
{
 this.file = File.OpenRead(f);
 this.ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
 this.listener = new TcpListener(ipAddress,3000);
 
 listener.Start();
 sender = new Thread(new ThreadStart(this.Acceping));
 Console.WriteLine("서버 실행중...");
 sender.Start();
}
~FileServer()
{
 file.Close();
}
public void Acceping()
{
 while(true)
 {
  client = listener.AcceptTcpClient();
  Console.WriteLine("클라이언트 접속");
  ns = client.GetStream();
  this.Send();
  ns.Close();
  client.Close();
 }
}
public void Send()
{
 byte[] b = new byte[1024];
 int count = 0;
 while( (count = this.file.Read(b,0,b.Length)) > 0 )
 {
  this.ns.Write(b,0,b.Length);
  this.sendSize += count;
 }
 Console.WriteLine("데이터 전송 완료");
}
public static void Main(string [] args)
{
 if( args.Length != 1)
 {
  Console.WriteLine("Usang args : AppName <fileName>");
  return;
 }
 if(!File.Exists(args[0]))
 {
  Console.WriteLine("File Access Error");
  return;
 }
 FileServer fServer = new FileServer(args[0]);
}
}


위의 코드를 실행 컴파일 시킨후 실행 시키게 된다. 그리고 다음은 클라이언트 소스 프로그램이다.

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
public class Client
{
private TcpClient client;
private NetworkStream ns;
private FileStream fs;
private Thread receive;
public Client(string ipAddress)
{
 this.client = new TcpClient(ipAddress,3000);
 this.ns = client.GetStream();
 this.fs = new FileStream("get.dat" , FileMode.Create);
 receive = new Thread(new ThreadStart(this.Receive));
 receive.Start();
}
public void Receive()
{
 int count = 0;
 byte[] b = new byte[1024];
 while( (count = ns.Read(b,0,b.Length))>0)
 {
  fs.Write(b,0,b.Length);
 }
 Console.WriteLine("파일전송완료");
}
~Client()
{
 fs.Close();
 ns.Close();
 client.Close();
}
public static void Main(string[] args)
{
 Client cl = new Client(args[0]);
}
}


div>