포트(Port)

개발 및 관리/Java 2013. 1. 31. 20:49 posted by HighLighter
반응형

 

TCP 포트는 특정 서버 어플리케이션에 할당된 16비트 부호가 없는 정수입니다.

 

서버 포트 번수: 0번 ~ 65,536번

 

0번부터 1,023번까지의 포트 번호는 HTTP, FPT, SMTP와 같이 'WELL-KNOWN SERVICE' 용으로 예약되어 있습니다. 직접 서버 프로그램을 만들 때는 1,023번까지의 번호는 사용하지 않는 것이 좋습니다. 그러므로 1,024번 부터 65,535번까지 사용하시면 됩니다. 

 

WELL-KNOWN SERVICE PORT NUMBER

FTP: 20

TELNET: 23

SMTP: 25

TIME: 37

HTTPS: 443

POP3: 110

HTTP: 80

반응형
반응형

 

간단한 서버, 클라이언트 예제입니다.

C언어에 비하면 정말 간단하게 구성되어 있습니다.

 

DailyAdviceClient.java

 

DailyAdviceServer.java

 

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

Thread  (0) 2013.02.01
포트(Port)  (0) 2013.01.31
직렬화  (0) 2013.01.31
trasient 사용 예제  (0) 2013.01.31
패턴 직렬화, 패턴 복구  (0) 2013.01.31

직렬화

개발 및 관리/Java 2013. 1. 31. 16:58 posted by HighLighter
반응형

1. 자바 객체직렬화 메커니즘

 원격 메소드 호출 시 사용되는 파라미터 데이터와 리턴되는 반환 데이터가 복사본으로 직렬화되어 상대방 JVM 환경에 전송

 

2. 자바 직렬화 메커니즘

 런타임 시에 실제 대상체의 (데이터) 타입에 근거하여 직렬화 가능 혹은 직렬화 가능 여부 검증

 

3. 자바 직렬화

 실행 시에 동적으로 생성된 자바 객체에 대한 상태를 일련의 바이트스트림 연속으로 저장하거나 또는 또 다른 스트림으로 전송하는 기술

 

4. 직렬화 가능한 객체의 조건

 1) java.io.Serializable 인터페이스를 직/간접으로 구현한 객체

 2) 내장 데이터타입은 기본적으로 직렬화 가능

 3) 멤버 변수로 선언된 객체 역시 Serialization을 구현 하거나 transient로 선언해야 한다.

  String name = "홍길동";

  직렬화 시켰는데, 즉 홍길동을 보냈는데 앞에 transient가 붙어 있으면 null로 전달된다.

 4) static 멤버 변수는 직렬화되지 않는다. default 값이 전달된다. Int는 0, String은 ???, Boolean은 false가...

반응형

trasient 사용 예제

개발 및 관리/Java 2013. 1. 31. 16:45 posted by HighLighter
반응형

 

아래 코드는 DungeonGame 클래스를 implements Serializable했고 즉, 직렬화 했고,

인스턴스 변수 중 하나를 trasient로 선언하고 직렬화하고 복구하는 코드이다.

 

DungeonTest.java

반응형

패턴 직렬화, 패턴 복구

개발 및 관리/Java 2013. 1. 31. 16:31 posted by HighLighter
반응형

 

//p.475 - (14장 직렬화와 파일 입출력)
배열 객체는 배열 안에 들어있는 것이 직렬화할 수 있기만 하면 직렬화할 수 있기 때문에 부울 변수의 배열을 저장하는 데는 문제가 없다.


1. 패턴 직렬화


//비트박스 코드 안에 들어갈 내부 클래스이다.
public class MySendListener implements ActionListener {

  //사용자가 버튼을 클릭해서 ActionEvent가 발생된 경우에 실행된다.
  public void actionPerformed(ActionEvent a) {

        //각 체크상자의 상태를 담아두기 위한 부울 배열을 만든다.
 boolean[] checkboxState = new boolean[256];

 for (int i = 0; i < 256; i++) {
  
   //checkboxList(체크상자로 이루어진 ArrayList)를 훑어보면서 각 체크상자의 상태를 확인하고 그 결과를 부울 배열에 추가한다. 
   JCheckBox check = (JCheckBox) checkboxList.get(i);
    if (check.isSelected()) {
  checkboxState[i] = true;
   }
 }

 try {
   FileOutputStream fileStream = new FileOutputStream(new File("Checkbox.ser"));
   ObjectOutputStream os = new ObjectOutputStream(fileStream);
   os.writeObject(checkboxState);
 } catch (Exception ex) {
  ex.printStackTrace();
 }
  } //메소드 끝
} //내부 클래스 끝

 

 

2. 패턴 복구


//비트박스 코드 안에 들어갈 내부 클래스이다.
public class MyReadInListener implements ActionListener {

  public vod actionPerformed(ActionEvent a) {
   
 boolean[] checkboxState = null;
 try {
   FileInputStream fileIn = new FileInputStream(new File("checkbox.ser"));
   ObjectInputStream is = new ObjectInputStream(fileIn);
         
          //파일에서 객체 하나(부울 배열)를 읽은 다음 부울 배열로 다시 캐스트한다. readObject()에서는 항상 Object 유형의 레퍼런스를 리턴하니까......
   checkboxState = (boolean[]) is.readObject();
 } catch (Exception ex) { ex.printStackTrace();}

 
   //실제 JCheckBox 객체로 구성된 ArrayList(checkboxList)에 들어있는 각각의 체크상자의 상태를 원래대로 복구한다.
 for (int i = 0; i< 256: i++) {
   JCheckBox check = (JCheckBox) checkboxList.get(i);
   if (checkboxState[i]) {
     check.setSelected(true);
    } else {
  check.setSelected(false);
   }
 }
 
 //현재 연주 중인 것을 멈추고 ArrayList에 들어있는 체크상자의 새로운 상태를 이용하여 시퀀스를 재구성한다.
 sequencer.stop();
 buildTrackAndStart();
  } //메소드 끝
} //내부 클래스 끝

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

직렬화  (0) 2013.01.31
trasient 사용 예제  (0) 2013.01.31
역직렬화 과정에서 문제가 일어날 수 있는 경우와 아닌 경우  (0) 2013.01.31
StringTokenizer  (0) 2013.01.31
파일 입출력, 읽고 쓰기  (0) 2013.01.25
반응형

1. 클래스를 변경했을 때 역직렬화 과정에서 문제가 일어날 수 있는 경우

1) 인스턴스 변수를 삭제하는 경우

2) 인스턴스 변수의 유형을 변경하는 경우

3) transient로 지정하지 않았던 인스턴스 변수를 trasient로 지정하는 경우

4) 클래스를 상속 계층에서 위나 아래로 옮기는 경우

5) Serializable이었던 클래스를 Serializable이 아닌 클래스로 변경하는 경우

    (즉, 클래스 정의부에서 implements Serializable을 지워버리는 경우)

6) 인스턴스 변수를 정적 변수로 변경하는 경우

 

2. 클래스를 변경해도 역직렬화와 관련된 문제가 생기지 않는 경우

1) 클래스에 새로운 인스턴스 변수를 추가하는 경우

    (직렬화 당시에 없었던 변수에는 기본값이 대입된다.)

2) 상속 트리에 클래스를 추가하는 경우

3) 상속 트리에서 클래스를 제거하는 경우

4) 인스턴스 변수의 접근 레벨을 역직렬화 과정에서 변수에 값을 대입하는 데 문제가 없는 범위 내에서 변경하는 경우

5)  transient로 지정했던 인스턴스 변수를 transient가 아닌 변수로 변경하는 경우 (default 값이 저장된다.)

 

3. 직렬화와 관련된 중요 내용들

1) ObjectOutputStream은 직렬화된 객체를 저장하기 위해 쓰이는 클래스다.
2) writeObject()를 한 번 호출했을 때 객체 여러 개가 한꺼번에 저장될 수도 있다.
3) 객체를 역직렬화할 때 그 생성자는 실행되지 않는다.
4) 직렬화를 할 때, 그리고 텍스트 파일을 저장할 때 모두 예외가 던져질 수 있다.
5) BufferedWriter는 FileWriter에 연쇄시킬 수 있다.
6) 파일을 쓰는 과정과 읽는 과정에서 모두 버퍼를 사용할 수 있다.

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

trasient 사용 예제  (0) 2013.01.31
패턴 직렬화, 패턴 복구  (0) 2013.01.31
StringTokenizer  (0) 2013.01.31
파일 입출력, 읽고 쓰기  (0) 2013.01.25
File, java.io.file 클래스  (0) 2013.01.25

StringTokenizer

개발 및 관리/Java 2013. 1. 31. 15:28 posted by HighLighter
반응형

//파싱할 문자열 - lineToParse

//구분자 - ,

StringTokenizer parser = new StringTokenizer(lineToParse, ",");

 

while (parser.hasMoreTokens()) {  //토큰이 남아 있는 동안 다음 토큰을 출력해라

  System.out.println(parser.nextToken());  //nextToken()을 처음으로 호출하면 첫번째 토큰이 리턴된다.

}

반응형

파일 입출력, 읽고 쓰기

개발 및 관리/Java 2013. 1. 25. 17:59 posted by HighLighter
반응형

자바에서 텍스트 파일 입출력에 대한 간단한 예제를 아래에 첨부해 보았다.

 

1. 파일 읽기

 

ReadAFile.java

 

try {
 File myFile = new File("MyText.txt");
 FileReader fileReader = new FileReader(myFile);

 BufferedReader reader = new BufferedReader(fileReader);

 String line = null;

 while ((line = reader.readLine()) != null) {
   System.out.println(line);
 }
 reader.close();
    } catch (Exception ex) {
 ex.printStackTrace();
    }
  }

 

2. 파일 쓰기

 

WriteAFile.java

 

 try {
   FileWriter writer = new FileWriter("Foo.txt");
   writer.write("a,");
   writer.write("b,");
    writer.write("c,");
    writer.write("d,");
    writer.write("e,");
    writer.close();
 } catch (Exception ex) {
  ex.printStackTrace();
 }
  }

 

cf. 텍스트 파일에 대한 작업 - BufferedReader, BufferedWriter

cf. 직렬화된 객체에 대한 작업 - ObjectOutputStream, ObjectInputStream (각 FileOutputStream과 FileInputStream에 연쇄시킨다.)

 

텍스트 파일에 저장할 때는 FileWriter 연결 스트림부터 시작한다.

FileWriter를 BufferedWriter에 연쇄시키면 효율을 향상시킬 수 있다.

텍스트 파일을 읽을 때는 FileReader 연결 스트림부터 시작한다.

FileReader를 BufferedReader에 연쇄시키면 효율을 향상시킬 수 있다.

반응형

File, java.io.file 클래스

개발 및 관리/Java 2013. 1. 25. 17:50 posted by HighLighter
반응형

 

java.io.file 클래스

 

File 객체로 할 수 있는 작업의 예

 

1. 이미 존재하는 파일을 나타내는 File 객체를 만든다.

 

File f = new File("Text.txt");

 

2. 새로운 디렉토리를 만든다.

 

File dir = new File("Chapter3");

dir.mkdir();

 

3. 디렉토리에 들어있는 내용의 목록을 출력한다.

 

if (dir.isDirectory()) {

String[] dirContents = dir.list();

for ( int i = 0; i < dirContents.length; i++) {

System.out.println(dirContents[i]);

}

}

 

4. 파일 또는 디렉토리의 절대 경로명을 구한다.

 

System.out.println(dir.getAbsolutePath());

 

5. 파일 또는 디렉토리를 삭제한다.(성공한 경우에는 true를 리턴한다.)

 

boolean isDeleted = f.delete();

 

 

반응형
반응형

 

private ArrayList <QuizCard> cardList;

cardList = new ArrayList <QuizCard> ();

try {
  BufferedWriter writer = new BufferedWriter(new FileWriter(file));
  Iterator cardIterator = cardList.iterator();
  while (cardIterator.hasNext()) {
     QuizCard card = (QuizCard) cardIterator.next();
     writer.write(card.getQuestion() + "/");
     writer.write(card.getAnswer() + "\n");
   }
        writer.close();
  } catch(IOException ex) {
 System.out.println("couldn't write the cardList out");
 ex.printStackTrace();
 }

 

QuizCardBuilder.java

 

QuizCardReader.java

 

1) Iterator에 대한 자세한 설명

http://cafe.naver.com/javasp/2099

 

 

2) Iterator에 대한 추가 설명

http://cafe.naver.com/czsaylon/6113

 

http://cafe.naver.com/sgprogramingcenter/69

 

http://maydaisy.egloos.com/848313

 

http://alecture.blogspot.kr/2012/10/iterator-listiterator.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/tgspg+(%EC%9E%90%EB%B0%94+%EA%B0%95%EC%A2%8C)

반응형

'개발 및 관리 > Java' 카테고리의 다른 글

파일 입출력, 읽고 쓰기  (0) 2013.01.25
File, java.io.file 클래스  (0) 2013.01.25
FileWriter  (0) 2013.01.25
정적 변수(Static Variable)도 직렬화(Serializable) 되나요?  (0) 2013.01.25
Head First Java p.441  (0) 2013.01.25