728x90
반응형
ChatServer.java
package networkex; import java.io.*; import java.net.*; //클라이언트에서 보내온 메세지를 전달받아 출력하는 서버프로그램 public class ChatServer { public static void main(String[] args) throws IOException { //서버 : 클라이언트의 요청을 받기 위한 준비를 한다. ServerSocket echoServer = new ServerSocket(4000); System.out.println("[message] Echo server Running..."); BufferedReader in = null; //Buffered 일시적으로 공간을 늘려 누적 후 실행 //클라이언트의 요청을 받아 들인다. //try~catch문이 없는 경우 서버에 오류가 발생하여 닫힐 수 있다. //try~catch > throws 책임감이 더 큼 try { Socket socket = echoServer.accept(); //클라이언트에서 서버의 ip,port입력해야 진행됨. //클라이언트가 보내온 메세지를 읽어들인다. //getInputStream() 클라이언트가 보내온 메세지가 없는 경우 스레드(작업은) 일시 중지가 된다. in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // in.readLine(); //클라이언트가 보낸 문자를 다 읽어들인다. String str = in.readLine(); System.out.println("["+socket.getInetAddress().getHostAddress() + "]님이 보내온 메세지 >>" + str); socket.close(); } catch (IOException e) { System.out.println("[error] 서버에 문제가 생겼습니다."); } finally { in.close(); echoServer.close(); //통로만 끊김 } } }
package networkex; import java.io.*; import java.net.*; //키보드로 메세지를 입력받아 서버에 접속하여 전달하는 클라이언트 프로그램 public class ChatClient { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter out = null; //socket객체 생성 : 서버에 접속 요청을 한다. // Socket socket = new Socket("자신의 ip주소 입력", 4000); //서버의 ip,port입력해야함 Socket socket = new Socket("127.0.0.1", 4000); try { System.out.println("전달 메세지 입력 >> "); String message = in.readLine(); //서버로 데이터를 보낼 (써서 담아둘) 객체 생성 //socket.getOutputStream() socket에 보냄 out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); out.write(message); //메세지쓰기 out.flush(); //메세지 내보내기, 버퍼 강제 비우기 } catch (IOException e) { System.out.println("[에러] 서버에 접속할 수 없습니다."); } finally { out.close(); in.close(); socket.close(); } } }
Server.java
package networkex; import java.io.*; import java.net.*; import java.util.Scanner; public class Server { public static void main(String[] args) throws IOException { System.out.println("서버가 실행되었습니다."); //서버 생성, 실행, 준비 ServerSocket serverSocket = new ServerSocket(5000); //client의 접속을 허용(accept) BufferedReader bufReader = null; BufferedWriter bufWriter = null; try { Socket socket = serverSocket.accept(); while(true) { //client가 보낼 데이터 담음 bufReader = new BufferedReader (new InputStreamReader(socket.getInputStream())); String message = bufReader.readLine(); System.out.println("클라이언트Message : " + message); //client에 데이터 전송 Scanner sc = new Scanner(System.in); System.out.println("[서버 메세지] : "); String str = sc.nextLine(); //client에 보낼 데이터를 담을 객체 생성 bufWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //클라이언트가 보낸 메세지가 "종료"라는 글자가 들어있으면 클라이언트로 "종료"글자 보내기 if (message.contains("종료")) str = "종료"; bufWriter.write(str); bufWriter.newLine(); //클라이언트로 데이터 전송하기 bufWriter.flush(); if (message.contains("종료")) { socket.close(); break; } } } catch (Exception e) { e.printStackTrace(); } finally { bufReader.close(); bufWriter.close(); serverSocket.close(); } } }
package networkex; import java.io.*; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) throws IOException { System.out.println("클라이언트가 접속되었습니다."); //서버 접속 Socket socket = new Socket("192.168.0.196", 7000); // Socket socket = new Socket("localhost", 5000); //Server에 보낼 데이터 BufferedWriter bufWriter = null; BufferedReader bufReader = null; try { bufWriter = new BufferedWriter (new OutputStreamWriter(socket.getOutputStream())); while (true) { // Server에 보낼 데이터를 담는 객체 생성 Scanner sc = new Scanner(System.in); System.out.println("[클라이언트 메세지] : "); String str = sc.nextLine(); bufWriter.write(str); bufWriter.newLine(); //서버로 데이터 전송(버퍼 강제 비움) bufWriter.flush(); //Server가 보낸 데이터를 담는 객체 생성 bufReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String message = bufReader.readLine(); bufWriter.newLine(); System.out.println("333"); System.out.println("서버Message : " + message); if(message.contains("종료")) { str = "종료"; bufWriter.write(str); bufWriter.newLine(); bufWriter.flush(); break; } } } catch (Exception e) { e.printStackTrace(); } finally { socket.close(); bufReader.close(); } } }
package networkex.chatting;
RDB ( Relational DataBase) 관계형데이터베이스 표도구의 데이터를 테이블이라는 구조화된 형식으로 저장, 변경, 삭제, 추가 검색 등을 지원하는 저장소 |
|
Management System 테이블 구조로 데이터를 저장, 변경, 삭제, 추가, 검색할 수 있는 데이터를 전반적으로 함께 관리할 수 있는 시스템 종류 : Oracle, 데이터는 무조건 테이블 구조로 저장이 된다. 영구적으로 데이터가 반영이 된다(저장) 데이터의 공유 |
SQL(Structure Query Language) |
|
직접적으로 데이터를 관리하는데 사용하는 명령문 | |
SQL문장 - 명령문은 대/소문자를 구별하지 않는다. - 하지만 값은 대/소문자를 구분한다. - SQL 문장은 한 줄 또는 여러 줄에 나눠서 입력할 수 있다. - SQL 문장의 끝은 반드시 세미콜론(;)로 끝을 맺는다. |
|
DML (Data Manipulation Language) = 데이터 조작어 - 데이터를 조작하는 명령어 - 데이터를 추가, 삭제, 변경, 검색(조회) INSERT - 추가 DELETE - 삭제(데이터의 전체, 일부 제거) UPDATE - 갱신(수정) SELECT - 원본은 유지되지만 데이터를 검색해서 가져올때 변형해서 가져올 수 있다. (검색, 조회) **반드시 영구적인 반영을 위해서는 TCL (확정(commit), 되돌리기(rollback))을 이용해야만 영구반영이 이루어진다. |
|
DQL (Data Query Language) = 데이터 질의어 - 데이터의 가져오는 명령만 처리하는 명령문 SELECT문 |
|
DDL (Data Defination Language) = 데이터 정의어 - 데이터를 저장하는 구조를 정의, 수정, 제거하는 기능을 처리하는 명령어 CREATE문 : 테이블, 계정, 뷰, 함수, 프로시저... 등을 생성 ALTER: 테이블..등을 수정, 변경, 이름을 변경 DROP : 테이블..등을 제거 TRUNCATE: 테이블의 구조만 제외하고 나머지를 모두 제거 (해당 테이블 내 데이터 전체삭제, 자동확정됨) |
CREATE TATBLE 테이블명 CREATE USER IDENTIFIED PW; DROP TABLE 테이블명 PURGE(완전제거); |
DCL (Data Control Language) = 데이터 제어어 - 데이터를 제어하는 기능 GRANT : 계정에 권한 부여 REVOKE : 계정에 권한 회수 |
|
TCL(Transaction Control Language) = 트랜젝션 제어어 : 작업을 제어하는 명령어 commit : 데이터베이스 전체 데이터의 갱신결과를 영구적으로 확정 rollback : 갱신결과를 영구적으로 전체 되돌리기 checkpoint(savepoint) : rollback하는 곳의 시점을 지정하여 원하는 지점까지의 rollback |
728x90
반응형
'[JAVA]' 카테고리의 다른 글
[JSP] 03_01_scriptlet.jsp - 덧셈, 짝수 (0) | 2024.03.12 |
---|---|
[JSP] 04_01_expression.jsp - Date/ 05_02_welcome.jsp - bootstrap/ 06_03_page_errorPage.jsp - error (0) | 2024.03.12 |
[20일차] PrintWriter Thread synchronized Join Network (0) | 2024.01.09 |
[19일차] Exception try ~ catch throws stack (0) | 2024.01.08 |
[18일차] HashMap Hashtable Anonymous InnerClass InstanceInner StaticInner Local Ramda (0) | 2024.01.05 |