티스토리 뷰

오늘은 C#으로 서버와 클라이언트 간의 파일 전송 예제 소스코드를 보도록 하겠습니다.


서버소스코드


using System; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
// 
class Program 
{ 
   private static void Main() 
   { 
      // 서버 소켓 생성 
      Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
      // 종단점 생성 
      IPEndPoint point = new IPEndPoint(IPAddress.Loopback, 8192);

      // 소켓 바인딩 
      mySocket.Bind(point); 
      // 소켓을 대기 상태로 둠 
      mySocket.Listen(1); 
      // 연결한 소켓을 받아들임 
      mySocket = mySocket.Accept(); 
      // 데이터를 받을 버퍼 생성 
      byte[] buffer = new byte[4]; 
      // 클라이언트로부터 파일 크기를 받음 
      mySocket.Receive(buffer); 
      // 받은 데이터를 정수로 변환하고 변수에 저장 
      int fileLength = BitConverter.ToInt32(buffer, 0); 
      // 버퍼 크기 새로 지정 
      buffer = new byte[1024]; 
      // 현재까지 받은 파일 크기 변수 
      int totalLength = 0;
      
      // 파일을 만듦 
      FileStream fileStr = new FileStream("music.mp3", FileMode.Create, FileAccess.Write); 
      // 받을 데이터를 파일에 쓰기 위해 BinaryWriter 객체 생성 
      BinaryWriter writer = new BinaryWriter(fileStr); 

      // 파일 수신 작업 
      while (totalLength < fileLength) 
      { 
         // 클라이언트가 보낸 파일 데이터를 받음 
         int receiveLength = mySocket.Receive(buffer); 
         // 받은 데이터를 파일에 씀 
         writer.Write(buffer, 0, receiveLength); 
         // 현재까지 받은 파일 크기를 더함 
         totalLength += receiveLength; 
      } 
      // 종료 작업 
      writer.Close(); 
      mySocket.Close(); 
   } 
} 


클라이언트 소스 코드
using System; 
using System.IO; 
using System.Net; 
using System.Net.Sockets; 
// 
class Program 
{ 
   private static void Main() 
   { 
      // 클라이언트 소켓 생성 
      Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

      // 서버와 연결 
      mySocket.Connect(IPAddress.Loopback, 8192); 
      // 파일을 엶 
      FileStream fileStr = new FileStream("music.mp3", FileMode.Open, FileAccess.Read); 
      // 파일 크기를 가져옴 
      int fileLength = (int)fileStr.Length; 
      // 파일 크기를 서버에 전송하기 위해 바이트 배열로 변환 
      byte[] buffer = BitConverter.GetBytes(fileLength); 
      // 파일 크기 전송 
      mySocket.Send(buffer); 
      // 파일을 보낼 횟수 
      int count = fileLength / 1024 + 1; 
      // 파일을 읽기 위해 BinaryReader 객체 생성 
      BinaryReader reader = new BinaryReader(fileStr);

      // 파일 송신 작업 
      for (int i = 0; i < count; i++) 
      { 
         // 파일을 읽음 
         buffer = reader.ReadBytes(1024); 
         // 읽은 파일을 서버로 전송 
         mySocket.Send(buffer); 
      } 
      // 종료 작업 
      reader.Close(); 
      mySocket.Close(); 
   } 
} 


댓글