Java SE/DatagramSocket 02

DatagramSocket 02

Soul-Learner 2008. 4. 18. 16:09

DatagramSocket 을 이용하여 송신측에서 소스파일을 수신측에 보내면 수신측에서는 그 데이터를 텍스트파일에 저장하는 예

송신측 소스

import java.net.*;
import java.io.*;
/*현재 소스파일을 수신측에 전송한다*/
class DatagramSend02 {
 public static void main(String[] args)  throws Exception {

  BufferedInputStream bin = new BufferedInputStream(new FileInputStream("DatagramSend02.java"));
  ByteArrayOutputStream bao = new ByteArrayOutputStream();

  byte[] buf = new byte[128];
  int read = 0;

  while((read=bin.read(buf, 0, buf.length))!= -1) {
   bao.write(buf, 0, read);
  }

  byte[] fileData = bao.toByteArray();
  DatagramPacket dp = new DatagramPacket(fileData, fileData.length, InetAddress.getByName("localhost"), 1234);
  DatagramSocket ds = new DatagramSocket();

  ds.send(dp);

  ds.close();
  bin.close();
  bao.close();

  System.out.println("파일데이터 전송완료");
 }
}


수신측 소스

import java.net.*;
import java.io.*;
/* 송신측에서 전송한 데이터를 수신하여 텍스트파일에 저장한다*/
class DatagramReceive02 {
 public static void main(String[] args) throws Exception {

  byte[] buf = new byte[4096];
  DatagramPacket dp = new DatagramPacket(buf, buf.length);
  DatagramSocket ds = new DatagramSocket(1234);

  System.out.println("데이터 기다림");
  ds.receive(dp);
  byte[] data = dp.getData();

  //System.out.println(new String(data, 0, dp.getLength()));

  FileOutputStream fout = new FileOutputStream("copy.txt");
  fout.write(data, 0, dp.getLength());

  fout.close();
  ds.close();
 }
}