1주/2주차
Java 객체지향
Java 기본 class
Java Thread
Java IO
3주차
Java Network ~ chatting + JavaFx
방 1개짜리
방 여러개 짜리
귓속말, 전체 공지 (부가 기능)
①②③④⑤⑥
다수의 computer들 간에 Data를 주고받기 위해 여러개의 computer를 연결(유선, 무선)해 놓은 물리적인 데이터 통신망
일반적으로 크기를 기준으로 여러가지 Network을 구성
PAN(Personal Area Network)...
LAN(Local Area Network)...
Network fo Network : Internet
email/ www/ ftp/ torrent
Network에 참여하고 있는 각 computer에게 논리적인 주소
(IP Address)를 부여
: 데이터를 주고 받기 위해 통신을 하기 위한 규칙
: 정해져 있는 protocal이 이미 많이 있음
: 하나의 숫자 (16bit 짜리 숫자 : 0~65535 사이값을 이용)
: 일반적으로 0~1023
은 well known-reserved port (강력 권장)
unique
: 프로그램 작성 -> 너무 어려움
: BSD계열의 Unix체계에서 -> socket
=> Network program을 하니 할만 하더라 !
=> Java에서도 socket 통신을 지원하기 위해 socket class
를 제공함
프로그램을 연결할 수 있는 양끝 단위
socket : 연결을 나타내는 논리적인 단위
: Java의 표준 GUI 라이브러리인 Swing을 대체하는 library
: library를 다운로드해서 설치 https://gluonhq.com/products/javafx/
JavaNetwork연습 프로젝트 생성
윈도우 - program files- java에 javafx 폴더 옮기기
properties- java buld path- libraries
event handling
사용자가 발생한 event를 처리하려면 어떻게 하나요?
Event Delegation model
Event 처리 방식의 개념
① Event Source
현재 event가 발생한 객체
② Event명
Event는 이미 Java에서 정의되어 있음
: event명을 이용해 class가 제공
③ Listener 객체
: event가 발생되었을 때 처리를 담당하는 객체
①②③④⑤⑥
④ event 객체
package javafxexam;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
//import java.awt.Button;
//
//import javafx.application.Application;
//import javafx.scene.layout.StackPane;
//import javafx.stage.Stage;
//public class JavaFXExample extends Application {
//
// @Override
// public void start(Stage primaryStage) throws Exception {
// // 화면 구성하는 작업을 여기서 함
// Button btn = new Button();
// btn.setText("안녕 !!");
//
//
// // button에 이벤트 처리를 해야 함
// // Java는 delegation model을 이용함 => Web JavaScript도 이 방식을 이용
// // Layout을 설정해요 (컴포넌트가 붙는 방식을 결정하는 객체)
// // StackPane => Layout 중 추가되는 순서대로 덧붙여서 시각화하는 Layout
// StackPane root = new StackPane();
//
// root.getChildren().add(btn);
//
//
// }
//
// public static void main(String[] args) {
// launch(); //method 호출 - static . 내부적으로 static이 GUI라는 thread를 호출..
// //GUI Thread가 실행되고 화면에 창이 뜸, main 종료
//
// }
//
//}//
public class JavaFXExample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 화면 구성하는 작업을 여기서 함
Button btn = new Button();
btn.setText("안녕 !!");
// button에 이벤트 처리를 해야 함
// Scene객체를 생성
// Java는 delegation model을 이용함 => Web JavaScript도 이 방식을 이용
// Layout을 설정해요 (컴포넌트가 붙는 방식을 결정하는 객체)
// StackPane => Layout 중 추가되는 순서대로 덧붙여서 시각화하는 Layout
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 150);
primaryStage.setTitle("연습입니다.");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(); //method 호출 - static . 내부적으로 static이 GUI라는 thread를 호출..
//GUI Thread가 실행되고 화면에 창이 뜸, main 종료
}
}
--module-path "C:\Program Files\Java\jdk-11.0.17\javafx-sdk-11\lib" --add-modules javafx.controls,javafx.fxml
① event source
: 객체 -> class
② event 명
: class 제공 -> ActionEvent
③ Listener 객체
: 이벤트 처리 객체
: class / interface
④ event 객체
: event 상세 정보
⑤⑥
public class InterfaceTest{
public static void main(String[] args) {
myInterface a = new myInterface(){
@Override
public void
}
}
}
package javafxexam;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
//import java.awt.Button;
//
//import javafx.application.Application;
//import javafx.scene.layout.StackPane;
//import javafx.stage.Stage;
//public class JavaFXExample extends Application {
//
// @Override
// public void start(Stage primaryStage) throws Exception {
// // 화면 구성하는 작업을 여기서 함
// Button btn = new Button();
// btn.setText("안녕 !!");
//
//
// // button에 이벤트 처리를 해야 함
// // Java는 delegation model을 이용함 => Web JavaScript도 이 방식을 이용
// // Layout을 설정해요 (컴포넌트가 붙는 방식을 결정하는 객체)
// // StackPane => Layout 중 추가되는 순서대로 덧붙여서 시각화하는 Layout
// StackPane root = new StackPane();
//
// root.getChildren().add(btn);
//
//
// }
//
// public static void main(String[] args) {
// launch(); //method 호출 - static . 내부적으로 static이 GUI라는 thread를 호출..
// //GUI Thread가 실행되고 화면에 창이 뜸, main 종료
//
// }
//
//}//
public class JavaFXExample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 화면 구성하는 작업을 여기서 함
Button btn = new Button();
btn.setText("안녕 !!");
// button에 이벤트 처리를 해야 함
// Scene객체를 생성
// Java는 delegation model을 이용함 => Web JavaScript도 이 방식을 이용
// button에 Action이라는 Event를 처리할 수 있는 Listenr객체를 붙인다
btn.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(AcitonEvent arg0) {
// event가 발생하면 자동으로 호출되는군요!
system.out.println("안녕하세요!!");
}
});
// Layout을 설정해요 (컴포넌트가 붙는 방식을 결정하는 객체)
// StackPane => Layout 중 추가되는 순서대로 덧붙여서 시각화하는 Layout
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 150);
primaryStage.setTitle("연습입니다.");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(); //method 호출 - static . 내부적으로 static이 GUI라는 thread를 호출..
//GUI Thread가 실행되고 화면에 창이 뜸, main 종료
}
}
sample 패키지에 ExampleTest.java 생성
package sample;
public class ExampleTest{
public static void main(String[] args){
// 우리프로그램을 실행시키려면
// javac ExampleTest.java => compile
// 결과로 bytecode인 ExamleTest.class 파일이 생성됨
// java ExamleTest 엔터 눌러서 실행
// java ExamleTest 10 20
system.out.println(args[0] + "," + args);
}
}
C/S(Client/Service)구조
① Server process 는 client가 접속하기를 기다리다가 접속이 들어오면 응답!
② client를 능동적으로 서버에 접속하는 process
③ server와 client가 데이터 통신을 하려면 socket객체에 양단에 존재해야 함
④ server를 client의 접속을 기다려야 하고 만약에 접속이 들어오면 연결해야 함
⑤ 데이터를 주고 받으려면 어떻게 해야 하나요?
①②③④⑤⑥
클라이언트가 1.서버에 접속하면 2.서버가 클라이언트에게 현재 날짜를 전송한다 -> 3.클라이언트가 화면에 출력 -> 4.서버와의 연결 통로
borderPane(5개의 영역으로 화면을 분할)
| |left |center|right|
|----|:----|:----:|----:|
||l1 | c1 | r1
|row2|l2 | c2 | r2
|row3|l3 | c3 | r3
//package exam01;
//
//import java.awt.Button;
//import java.awt.TextArea;
//import java.awt.event.ActionEvent;
//import java.beans.EventHandler;
//
//public class Exam01_DateClient extends Application {
//
// // filed
// TextArea textArea;
// Button connBtn;
//
// @Override
// private void start(Stage primaryStage) throws Exception {
// // 화면구성을 해보아요
// // 일단 레이아웃부터 하나 만들어요
// BorderPane root = new BorderPane();
// root.setPrefSize(700,500);
//
// // component 생성
// textarea = new TextArea();
// root.setCenter(textarea);
//
// connBtn = new Button("Date 서버 접속");
// connBtn.setPrefSize(150,40);
// connBtn.setOnAction(new EventHandler<ActionEvent>() {
//
// }
//
// @Override
// public void handel(ActionEvent arg0) {
// // 접속 버튼을 클릭하면 하는 일을 여기에 작성
// // 서버와 접속하는 코드를 만들어 주면 됨
// System.out.println("서버에 접속해요!");
// }
//
//
// });
//
//
// FlowPane flowpane = new FlowPane(); // 아래쪽 영역에 붙는 layout
// // 여백 좀 잡아서 그나마 좀 보기 좋게 만들어 보자
// flowpane.setPadding(new Insets(10, 10, 10, 10));
// flowpane.setColumnHalignment(HPos.CENTER);
// flowpane.setPrefSize(700, 40);
// flowpane.setHgap(10);
//
// // 버튼을 flowpane에 붙여요
// flowpane.getChildren().add(connBtn);
//
// // 이렇게 만든 flowpane(판때기)를 borderlayout의 아래쪽에 붙여야 함
// root.setBottom
//
//
// public static void main(String[] args) {
// launch();
//
// }
//}//
package exam01;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class Exam01_DateClient extends Application {
//field
TextArea textarea;
Button connBtn;
@Override
public void start(Stage primaryStage) throws Exception {
// 화면 구성을 해 보아요!
// 일단 레이아웃부터 만들어보아요
BorderPane root = new BorderPane();
root.setPrefSize(700, 500);
//component 생성
textarea = new TextArea();
root.setCenter(textarea);
//버튼 생성
connBtn = new Button("Date 서버 접속");
connBtn.setPrefSize(150, 40);
connBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
//접속버튼을 클릭하면 하는일을 여기에 작성
//서버와 접속하는 코드를 만들어주면 돼요
System.out.println("서버에 접속해요");
}
});
FlowPane flowpane = new FlowPane(); //아래쪽 영역에 붙는 layout
//여백 잡아서 보기 좋게 만들자!
flowpane.setPadding(new Insets(10, 10, 10, 10));
flowpane.setColumnHalignment(HPos.CENTER);
flowpane.setPrefSize(700, 40);
flowpane.setHgap(10);
//버튼을 flowpane에 판떼기 붙이자
flowpane.getChildren().add(connBtn);
//이렇게 만든 flowpane은 borderlayout의 아래쪽에 붙여야 해요
root.setBottom(flowpane);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch();
}
}
server socket은 클라이언트의 접속을 기다리는 역할