네트워크(Network)
- Net + work 합성어
- 컴퓨터들이 통신기술을 이용하여 그물망처럼 연결된 통신 이용형태
인터넷(Internet)
- 컴퓨터로 연결하여 TCP/IP 프로토콜을 이용하여 정보를 주고받는 네트워크
✔ IP(internet Protocol)
- 인터넷에 연결되어 있는 모든 장치를 식별할 수 있도록 장비에게 부여되는 고유 주소
✔ IPv4
- 8bit씩 4자리 2^8 = 256 -> 0~255
- 하나의 스텟마다 0 ~ 255 ( 총 0 ~ 약 42억9천)
예) 211.100.85.100
- 향후 IPv6, 32bit
내 아이피 확인
- 네이버 "내 ip"로 검색 -> 123.142.55.115
- cmd -> ipconfig -> 192.168.12.12
도메인 -> IP, IP -> 도메인
- cmd -> nslookup -> ex) www.naver.com 또는 아이피주소입력하면 뜸
✔ 포트(port)
- 컴퓨터나 통신장비에서 다른 장치에 물리적으로 접속되는 특졍한 통로
InetAddress 클래스
- Ip 주소 관련 클래스
- getHostName(): 도메인을 리턴
- getHostAddress(): IP주소를 리턴
URL 클래스
- URL 주소 관련 클래스
예)https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC&oquery=t%EC%8A%A4%ED%86%A0%EB%A6%AC+%EC%97%90%EB%9F%AC&tqi=h096Ilp0JXVssuWYLrwssssssgV-161670
- getProtocol() : 프로토콜
- getHost(): 호스트(도메인)
- getPort(): 포트
- getPath(): 리소스
- getQuery(): 값
URLConnection 클래스
- URL 클래스 보다 추가된 기능, 연결에 대한 정보를 리턴
버퍼(buffer)
- 입출력을 수행하는데 있어 속도차이를 극복하기 위해 사용하는 임시 저장 공간
- 프로그래밍이나 운영체제에서 CPU와 보조기억장치 사이에서 사용되는 임시 저장 공간
Stream은 byte 단위로 데이터를 처리할 수 있는 메서드를 제공하는 클래스이고
Reader, Writer는 char 단위로 데이터를 처리할 수 있는 메서드를 제공하는 클래스이다.
BufferedReader 클래스
- 데이터(문자)를 버퍼에 담아줌
BufferedInputStream 클래스
- 바이너리(음악,영상,사진 등등 문자가 아닌 자료)를 버퍼에 담아줌
** 스트림 : 파일데이터 , HTTP 응답데이터, 키보드 입력
2.TCP/IP 네트워킹
소켓(socket)
- 두 호스트 사이 연결
- 어떠한 방식으로 통신을 할지 정해주는 것
- 원격 장비에 연결, 데이터 전송(보내기, 받기), 포트 지정, 수신 대기(서버와 클라이언트 관계, p2p)
ServerSocket 클래스(포트번호)
- 클라이언트의 연결 요청을 기다리면서 연결 수락을 담당하는 클래스
Socket 클래스(IP)
- 연결된 클라이언트와 통신을 담당하는 클래스
//클라는 일반소켓 서버는 서버소켓사용
서버 소켓은 일반소켓이 들어올때까지 대기하다가
일반 소켓이 접속하게 되면 서버소켓은 일반소켓을 만들어낸다
그래서 통신은 일반소켓과 일반소켓끼리 통신하게된다
서버부터 실행해야함!
문제. 에코서버를 만들어보자
데이터
클라이언트 ------> 서버
<------
데이터
과제.
c/s 환경에서 아래와 같이 프로그램을 만들어보자
*************** 메뉴 ***************
1. 학생 리스트
학번 이름 연락처 성별 주소
2. 성적 리스트
학번 이름 국어 수학 영어 총점 평균
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Network1 {
public static void main(String[] args) {
try {
InetAddress inetAddress = InetAddress.getByName("www.naver.com"); //도메인을 넣어주면
System.out.println(inetAddress.getHostName()); // 도메인 주소 가져오기
System.out.println(inetAddress.getHostAddress()); // IP 주소 가져오기 대기업 서버는 ip주소가 여러개라 바뀔수있음
// InetAddress[] inetAddress = InetAddress.getAllByName("www.naver.com"); // 이 도메인주소에 있는 모든 ip 주소를 배열형태로 반환
// for(InetAddress iAdd : inetAddress) {
// System.out.println(iAdd.getHostAddress());
// }
} catch (UnknownHostException e) { //내가 도메인 쳤을때 모르는 호스트 요청하게되면 exception 처리를 강제
throw new RuntimeException(e);
}
}
}
import java.net.MalformedURLException;
import java.net.URL;
public class Network2 {
public static void main(String[] args) {
try { //url객체는 url문구 자체에 관한 정보를 받아올수있는?
URL url = new URL("https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC&oquery=t%EC%8A%A4%ED%86%A0%EB%A6%AC+%EC%97%90%EB%9F%AC&tqi=h096Ilp0JXVssuWYLrwssssssgV-161670");
System.out.println(url.getProtocol()); // 프로토콜
System.out.println(url.getHost()); // 호스트(도메인)
System.out.println(url.getPort()); //-1(80)
System.out.println(url.getPath()); // 도메인뒤에 나오는 리소스 (serach : 파일이름, naver : 확장명)
System.out.println(url.getQuery()); // 값
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Network3 {
public static void main(String[] args) {
try {
URL url = new URL("https://koreaisacademy.com/");
URLConnection conn = url.openConnection(); //urlconnection은 추상클래스다 객체생성은 url.openconnection 을통해 받아서 한다
// openConnection()은 Returns a URLConnection instance that represents a connection to the remote object referred to by the URL.
// openConnection()은 해당 url의 목적지와의 연결정보를 담은 URLConnection인스턴스를 반환한다
System.out.println(conn);
System.out.println("콘텐트"+conn.getContent());
System.out.println(conn.getDate()); // 1666142646000 -> timestamp
System.out.println(conn.getURL());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}catch (IOException e) {
throw new RuntimeException(e);
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Network4 {
public static void main(String[] args) {
BufferedReader br = null;
try {
URL url = new URL("https://koreaisacademy.com/"); //url 넣는 객체
br = new BufferedReader(new InputStreamReader(url.openStream())); //html 소스를 가져온다 url은 open부터 쓰네
//BufferedReader(Reader in, int sz) 버퍼드리더 안에는 어떠한 리더든 삽입가능
//inputstreamreader안에는 inputStream 타입만 넣을수있다
//url.openStream() //url 컨넥션으로 부터 읽은 값을 InputStream으로 반환
//InputStreamReader isr = new InputStreamReader(url.openStream());
//inputstream은 바이트 기반 입력 스트림의 최상위 추상클래스 입력스트림은 네트워크 스트림 파일 스트림 여러 종류가있는데 이를 다 포함하는 젤큰 추상클래스
//버퍼드리더는 문자를 읽어옴
//버퍼는 프로그래밍이나 운영체제에서 CPU와 보조기억장치 사이에서 사용되는 임시 저장 공간
//inputStreamReader는 바이트를 읽어서 해독후 character로 변환
String data = null;
while((data = br.readLine()) != null){
System.out.println(data);
}
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}catch (IOException e) {
throw new RuntimeException(e);
}finally { //버퍼 존재한다면 close해줘라~
if(br != null){
try{
br.close(); //이미 버퍼가 없을수도있어서 없는애한테 닫아라고하면 에러날수잇음
}catch(IOException e){
e.printStackTrace();
}
}
}
}
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Network5 {
public static void main(String[] args) {
BufferedInputStream bis = null; //byte단위로 파일을 읽어 올때 사용하는 버퍼 스트림
BufferedOutputStream bos = null; //byte단위로 파일을 기록 할때 사용하는 버퍼 스트림 입니다
String url = "https://img1.daumcdn.net/thumb/R1280x0/?fname=http://t1.daumcdn.net/brunch/service/user/wXP/image/6j8FvDZzIaPickhD9G5IR-u7yGc.png";
try {
URLConnection conn = new URL(url).openConnection(); //openconnection()은 URLConnection 타입을 반환
bis = new BufferedInputStream(conn.getInputStream()); //버퍼드인풋스트림은 바이트 //인풋스트림타입만 받을수있음
bos = new BufferedOutputStream(new FileOutputStream("./daum.jpg")); //아웃풋스트림(추상클래스)만 넣을수있고 아웃풋스트림에는
//ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, PipedOutputStream 등이 있다
//바이트단위로 읽고 작성하기위해서 BufferedOutputStream,BufferedInputStream 사용
int data =0;
while((data = bis.read()) != -1){
bos.write(data);
}
System.out.println("파일 생성 완료!");
} catch (IOException e) {
e.printStackTrace();
} finally{
if(bis != null)
try{
bis.close();
}catch(IOException e){
e.printStackTrace();
}
if(bos != null)
try{
bos.close();
}catch(IOException e){
e.printStackTrace();
}
}
}}
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server1 {
public static void main(String[] args) {
System.out.println("서버가 실행되었습니다");
//서버는 서버소켓과 그냥 소켓을 만들어줘야함
ServerSocket serverSocket = null; //서버소켓
Socket socket = null; //소켓
try{ //서버는 포트번호를 지정해줘야함(서버내에 다른프로그램의 포트번호와 충돌이 나지않게 지정을 잘해야함)
serverSocket = new ServerSocket(3579);
System.out.println("서버가 준비되었습니다");
socket = serverSocket.accept(); //사용자가 들어올때까지 대기해라. 들어오면 socket 참조변수안으로 값이 들어감
//서버에서 만들어낸 소켓은 클라이언트 소켓이 들어올때까지 대기해라! serverSocket.accept()!!하면 들올때까지 대기
System.out.println("클라이언트가 접속되었습니다");
}catch (IOException e) {
e.printStackTrace();
}finally{
if(socket != null) try {socket.close();} catch(IOException e){} //둘다 닫아줘야함
if(serverSocket != null) try{serverSocket.close();}catch (IOException e){} //둘다 닫아줘야함
}
}
}
import java.io.IOException;
import java.net.Socket;
public class Client1 {
public static void main(String[] args) {
System.out.println("클라이언트가 실행되었습니다");
Socket socket = null;
try{
System.out.println("서버와 연결을 시도중입니다");
socket = new Socket("192.168.0.2", 3579);
System.out.println("연결되었습니다");
}catch(IOException e){
e.printStackTrace();
}finally {
if(socket != null) try {socket.close();} catch(IOException e){};
}
System.out.println("프로그램이 종료되었습니다");
}
}
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server2 {
public static void main(String[] args) {
System.out.println("서버가 실행되었습니다");
ServerSocket serverSocket = null;
Socket socket = null;
BufferedWriter bw = null;
try{ //서버는 포트번호를 지정해줘야함(서버내에 다른프로그램의 포트번호와 충돌이 나지않게 지정을 잘해야함)
serverSocket = new ServerSocket(3579);
System.out.println("서버가 준비되었습니다");
socket = serverSocket.accept(); //사용자가 들어올때까지 대기해라. 들어오면 socket 참조변수안으로 값이 들어감
System.out.println("클라이언트가 접속되었습니다");
//버퍼드라이터는 문자열을 쓸수있음
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //BufferedWriter( ) 안에는 추상클래스writer 의 객체를 쓸수있고
//writer 밑에는 BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, FileWriter, PipedWriter, PrintWriter, StringWriter, Reader
bw.write("Server Message!!");
bw.flush(); //버퍼를 비우면서 내보냄
}catch (IOException e) {
e.printStackTrace();
}finally{
if(bw!= null) try{bw.close();} catch(IOException e){}
if(serverSocket != null) try{serverSocket.close();}catch (IOException e){}
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client2 {
public static void main(String[] args) {
System.out.println("클라이언트가 실행되었습니다");
Socket socket = null;
BufferedReader br = null;
try{
System.out.println("서버와 연결을 시도중입니다");
socket = new Socket("192.168.0.2", 3579);
System.out.println("연결되었습니다");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("메세지 : " + br.readLine());
}catch(IOException e){
e.printStackTrace();
}finally {
if(br!= null) try{br.close();} catch(IOException e){}
if(socket != null) try {socket.close();} catch(IOException e){};
}
System.out.println("프로그램이 종료되었습니다");
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server3 {
public static void main(String[] args) {
System.out.println("서버가 실행되었습니다");
ServerSocket serverSocket = null;
Socket socket = null;
BufferedWriter bw = null;
BufferedReader br = null;
try{ //서버는 포트번호를 지정해줘야함(서버내에 다른프로그램의 포트번호와 충돌이 나지않게 지정을 잘해야함)
serverSocket = new ServerSocket(3579);
System.out.println("서버가 준비되었습니다");
socket = serverSocket.accept(); //사용자가 들어올때까지 대기해라. 들어오면 socket 참조변수안으로 값이 들어감
System.out.println("클라이언트가 접속되었습니다");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// System.out.println("클라이언트의 메세지 : " + br.readLine());
String msg = br.readLine();
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(msg + "\n");
bw.flush(); //버퍼를 비우면서 내보냄
System.out.println("전송되었습니다");
}catch (IOException e) {
e.printStackTrace();
}finally{
if(br!= null) try{br.close();} catch(IOException e){}
if(bw!= null) try{bw.close();} catch(IOException e){}
if(serverSocket != null) try{serverSocket.close();}catch (IOException e){}
}
}
}
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client3 {
static int a=0;
public static void main(String[] args) {
System.out.println("클라이언트가 실행되었습니다");
Socket socket = null;
BufferedReader br = null;
BufferedWriter bw = null;
try{
System.out.println("서버와 연결을 시도중입니다");
socket = new Socket("192.168.0.2", 3579);
System.out.println("연결되었습니다");
System.out.print("메시지를 입력하세요 : ");
Scanner sc = new Scanner(System.in);
String msg = sc.next();
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw.write(msg +"\n");
bw.flush(); //버퍼를 비우면서 내보냄
String msg2 = br.readLine(); //서버가 보내준거 한줄 읽고
System.out.println("메세지 : " + msg2);
}catch(IOException e){
e.printStackTrace();
}finally {
if(bw!= null) try{bw.close();} catch(IOException e){}
if(br!= null) try{br.close();} catch(IOException e){}
if(socket != null) try {socket.close();} catch(IOException e){};
}
System.out.println("프로그램이 종료되었습니다");
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server4 {
public static void main(String[] args) {
System.out.println("서버가 실행되었습니다");
ServerSocket serverSocket = null;
Socket socket = null;
BufferedWriter bw = null;
BufferedReader br = null;
try{ //서버는 포트번호를 지정해줘야함(서버내에 다른프로그램의 포트번호와 충돌이 나지않게 지정을 잘해야함)
serverSocket = new ServerSocket(3579);
System.out.println("서버가 준비되었습니다");
socket = serverSocket.accept(); //사용자가 들어올때까지 대기해라. 들어오면 socket 참조변수안으로 값이 들어감
// 그래서 이 소켓으로 클라이언트 소켓과 연결 하는것임
System.out.println("클라이언트가 접속되었습니다");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine(); //클라로부터 값을 받아서 msg에 넣어
int input =Integer.parseInt(msg);
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write("구구단 " + input+"단 을 시작한다\n");
bw.flush();
for(int i=1;i<=9;i++) {
String temp = (input + " * " + i +" = "+ (input*i));
bw.write(temp + "\n");
}
bw.flush(); //버퍼를 비우면서 내보냄
System.out.println("전송되었습니다");
}catch (IOException e) {
e.printStackTrace();
}finally{
if(br!= null) try{br.close();} catch(IOException e){}
if(bw!= null) try{bw.close();} catch(IOException e){}
if(serverSocket != null) try{serverSocket.close();}catch (IOException e){}
}
}
}
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client4 {
public static void main(String[] args) {
System.out.println("클라이언트가 실행되었습니다");
Socket socket = null;
BufferedReader br = null;
BufferedWriter bw = null;
try{
System.out.println("서버와 연결을 시도중입니다");
socket = new Socket("192.168.0.2", 3579);
System.out.println("연결되었습니다");
System.out.print("단수를 입력하세요 : ");
Scanner sc = new Scanner(System.in);
String msg = sc.next();
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw.write(msg +"\n");
bw.flush(); //버퍼를 비우면서 내보냄
for(int i=0;i<10;i++){
String msg2 = br.readLine(); //서버가 보내준거 한줄 읽고
System.out.println(msg2);
}
}catch(IOException e){
e.printStackTrace();
}finally {
if(bw!= null) try{bw.close();} catch(IOException e){}
if(br!= null) try{br.close();} catch(IOException e){}
if(socket != null) try {socket.close();} catch(IOException e){};
}
System.out.println("프로그램이 종료되었습니다");
}
}
과제
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.*;
public class AssignmentServer {
public static void main(String[] args) {
System.out.println("서버가 실행되었습니다");
ServerSocket serverSocket = null;
Socket socket = null;
BufferedWriter bw = null;
BufferedReader br = null;
try{ //서버는 포트번호를 지정해줘야함(서버내에 다른프로그램의 포트번호와 충돌이 나지않게 지정을 잘해야함)
serverSocket = new ServerSocket(3579);
System.out.println("서버가 준비되었습니다");
socket = serverSocket.accept(); //사용자가 들어올때까지 대기해라. 들어오면 socket 참조변수안으로 값이 들어감
// 그래서 이 소켓으로 클라이언트 소켓과 연결 하는것임
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = br.readLine(); //클라로부터 값을 받아서 msg에 넣어
int menunum =Integer.parseInt(msg);
AssignDAO assignDAO = new AssignDAO(bw,br);
if(menunum == 7){
bw.write("프로그램을 종료합니다\n");
bw.flush();
}
try{
switch (menunum){
case 1:
assignDAO.list();
break;
case 2:
assignDAO.open_grade();
break;
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}catch (IOException e) {
e.printStackTrace();
}finally{
if(br!= null) try{br.close();} catch(IOException e){}
if(bw!= null) try{bw.close();} catch(IOException e){}
if(serverSocket != null) try{serverSocket.close();}catch (IOException e){}
}
}
}
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class assignClient {
public static void main(String[] args) {
System.out.println("클라이언트가 실행되었습니다");
Socket socket = null;
BufferedReader br = null;
BufferedWriter bw = null;
try{
Scanner sc = new Scanner(System.in);
System.out.println("서버와 연결을 시도중입니다");
socket = new Socket("192.168.0.2", 3579);
System.out.println("연결되었습니다");
System.out.println("*********메뉴*******\n" +
"1.학생리스트\n" +
"2.성적리스트");
System.out.print("메뉴번호를 입력하세요 : ");
String num = sc.next();
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
bw.write(num +"\n");
bw.flush(); //버퍼를 비우면서 내보냄
String temp="";
while((temp=br.readLine())!=null){
System.out.println(temp);
}
}catch(IOException e){
e.printStackTrace();
}finally {
if(bw!= null) try{bw.close();} catch(IOException e){}
if(br!= null) try{br.close();} catch(IOException e){}
if(socket != null) try {socket.close();} catch(IOException e){};
}
System.out.println("프로그램이 종료되었습니다");
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class AssignDAO {
BufferedWriter bw ;
BufferedReader br ;
public AssignDAO(BufferedWriter bw, BufferedReader br) {
this.bw = bw;
this.br = br;
}
public void list() throws ClassNotFoundException, SQLException, IOException {
Connection conn = Dbconn.getConnection();
StringBuilder sql = new StringBuilder();
sql.append("select st_snum, st_name, st_ph,st_gender,st_address,st_regdate from tb_student order by st_name ");
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
bw.write("학번 이름 전화번호 성별 등록일 주소 "+"\n");
while(rs.next()){
String snum = rs.getString("st_snum");
String name = rs.getString("st_name");
String ph = rs.getString("st_ph");
String gender = rs.getString("st_gender");
String address = rs.getString("st_address");
String regdate = rs.getString("st_regdate");
bw.write(snum+" "+name+" "+ph+" "+gender+" "+regdate+" "+address+"\n");
}
bw.flush();
}
public void open_grade() throws ClassNotFoundException, SQLException,IOException {
boolean isFind = false;
Connection conn = Dbconn.getConnection();
StringBuilder sql = new StringBuilder();
sql.append("select st_snum,st_name,gr_kor,gr_math,gr_eng,(gr_math+gr_math+gr_eng),(gr_math+gr_math+gr_eng)/3 from tb_student,tb_grade where st_snum = gr_snum");
PreparedStatement pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
bw.write("학번 이름 국어 수학 영어 총점 평균 "+"\n");
while(rs.next()){
isFind = true;
String snum = rs.getString("st_snum");
String name = rs.getString("st_name");
String kor = rs.getString("gr_kor");
String math = rs.getString("gr_math");
String eng = rs.getString("gr_eng");
String sum = rs.getString("(gr_math+gr_math+gr_eng)");
String avg = rs.getString("(gr_math+gr_math+gr_eng)/3");
StringBuilder str = new StringBuilder();
str.append(snum+ " ")
.append(name+ " ")
.append(kor+ " ")
.append(math+ " ")
.append(eng+ " ")
.append(sum+" ")
.append(avg);
bw.write(str.toString()+"\n");
}
bw.flush();
if(!isFind) bw.write("목록이 없습니다"+"\n");
bw.flush();
}
}
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
Builder패턴 (0) | 2023.04.18 |
---|---|
Java | 채팅프로그램 (0) | 2022.10.21 |
Java,MySQL | 싱글톤패턴, PreparedStatement, ResultSet, DAO (0) | 2022.10.19 |
Java,MySQL | JDBC,JDBC Driver,DBMS,Statement (0) | 2022.10.19 |
Java,MySQL | JDBC Driver설치,JDBC API연결,Statement (0) | 2022.10.19 |