Java

자바 Serializable(객체직렬화) 를 통해 소켓 전송 수신.

조심이 2008. 7. 28. 15:22
반응형

ArrayList 객체를 소켓으로 전송할때...

객체 직렬화를 통해 소켓으로 객체를 전송할 수 있다..

send.java (송신)
data.java (직렬화)
receive.java (수신)


=======================================send.java===================
import java.util.ArrayList;
import java.net.Socket;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

...

public class 전송{ .....

ArrayList list = new ArrayList();

for (int i = 0; i < 100; i++) {   //100개의 arraylist를 만든다.
      list.add("1234");
     }


 if(list.size() > 0){
   
 Socket ssoc = null;
     OutputStream sos = null;
     ObjectOutputStream soos = null;
     
     try{    
      ssoc = new Socket(서버 아이피, 포트);
      sos = ssoc.getOutputStream();
      soos = new ObjectOutputStream(sos);

     
      //객체 직렬화를 통해  List 객체를 소켓으로 보냄
      Data d = new Data();  // 아래의 Data.java 객체 생성(직렬화)
      d.setList(list);
      soos.reset();
     
      soos.writeObject(d);
      soos.flush();
   
     

      soos.close();
      sos.close();
      ssoc.close();
     
   
     }catch(Exception e){
      logger.error("#"+e.toString());
     }finally{
     
     }

==============================data.java===============

import java.io.Serializable;
import java.util.ArrayList;

public class Data implements Serializable{
 ArrayList list;

 public ArrayList getList() {
  return list;
 }

 public void setList(ArrayList list) {
  this.list = list;
 }
 
}
=========================receive.java=======================

import java.util.ArrayList;
import java.net.Socket;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class 수신 {....


try {
 
     soc = new Socket(아이피, 포트);
     
     soc.setKeepAlive(true);
     

     is = soc.getInputStream();
     ois = new ObjectInputStream(is);

     while (true) { 

      logger.info("incoming data");
      try {
       //객체 직렬활를 이용한 입력
       //파일 서버로 부터 정보를 받는다. 리스트 객체를 직렬화를 통해 소켓으로 받음
   
       Data d = (Data) ois.readObject();
       ArrayList list = new ArrayList();
       list = (ArrayList) d.getList();

       if (list.size() > 0) {
       //전송받은 데이터 처리
       } else {
   
       }

       Thread.sleep(50);

      } catch (ClassNotFoundException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (InterruptedException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }

     }

    } catch (UnknownHostException e) {
     logger.error(e.getMessage());
     isStoped = true;
     try {
      if (soc != null)
       soc.close();
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
    } catch (IOException e) {
     logger.error(e.getMessage());
     try {
      if (soc != null)
       soc.close();
     } catch (IOException e1) {
     
      e1.printStackTrace();
     }
     
    } catch (Exception e) {
   
   

    }finally{
     try {
      if (soc != null)
       soc.close();
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
    }


반응형