노력과 삽질 퇴적물

JAVA: 자바 기초 (4) 본문

프로그래밍note/언어. JAVA & JDK 계열

JAVA: 자바 기초 (4)

MTG 2012. 8. 8. 22:42

JAVA: 자바 기초 (1)

JAVA: 자바 기초 (2)

JAVA: 자바 기초 (3)

JAVA: 자바 기초 (4)






11장. 네트워크 통신

 0. CMD를 이용한 NW통신 테스트 방법

1) 컴파일

javac 클라이언트_소스파일.java

javac 서버_소스파일.java

->소스파일내에 패키지 선언이 있으면 절대 안 됩니다. 컴파일 에러가 납니다.


2) 실행

 CMD창을 2개 띄워서 1개는 서버 실행, 다른 하나로 클라이언트 실행입니다. 참고로 서버파일을 먼저 실행한후에 클라이언트를 실행하는게 좋습니다.

java 클라이언트 파일명

java 서버파일명


* 제 예시코드에 잇는 서버들은 반복동작을 지정하지 않았기 때문에 1번만 클라이언트와 통신하고 종료됩니다.




* 추천자료: "강이"의 JAVA 강좌: 자바의 소켓 프로그래밍(Socket Programming)

 1. 소켓 네트워크 통신

 ① 클라이언트

//package chapter11;

import java.net.InetAddress;

import java.net.Socket;

import java.net.UnknownHostException;

import java.io.IOException;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;


public class SocketClient

{

public static void main( String[] message ) throws IOException

{

try

{

InetAddress ia = InetAddress.getByName("_이_문자열내에_서버IP_");

Socket soc = new Socket(ia, 1234);


OutputStreamWriter osw = new OutputStreamWriter(soc.getOutputStream());

BufferedWriter bw = new BufferedWriter(osw, 512);

PrintWriter pw = new PrintWriter(bw);

pw.print("이 메시지는 영국에서 시작된 행운의....");

pw.flush();

InputStreamReader isr = new InputStreamReader(soc.getInputStream());

BufferedReader br = new BufferedReader(isr, 512);

while(true)

{

String str = br.readLine();

if(str == null)

break;

System.out.print("서버 : " + str + "\n");

}

pw.close();

bw.close();

osw.close();

soc.close();

}catch(UnknownHostException e){   System.out.print("NW 에러 : " + e   );.

}catch(IOException e){   System.out.print("IO 에러 : " + e);   }

}

}




 1. 소켓 네트워크 통신

 ② 서버

//package chapter11;

import java.net.Socket;

import java.net.ServerSocket;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.OutputStreamWriter;

import java.io.BufferedWriter;

import java.io.PrintWriter;


public class SocketServer

{

public static void main( String[] message ) throws IOException

{

System.out.print("서버 준비중.\n");

ServerSocket ss = new ServerSocket(1234);

Socket soc = ss.accept();

InputStreamReader isr = new InputStreamReader(soc.getInputStream());

BufferedReader br = new BufferedReader(isr, 512);

while(true)

{

String data = br.readLine();

if(data==null)

break;

System.out.print("msg : " + data);

}

//출력

OutputStreamWriter osw = new OutputStreamWriter(soc.getOutputStream());

BufferedWriter bw = new BufferedWriter(osw, 512);

PrintWriter pw = new PrintWriter(bw);

pw.print("수신확인");

pw.flush();

isr.close(); // 스트림 리더 종료.

br.close(); // 버퍼리더 종료.

pw.close(); // 프린터 리더 종료. 

bw.close(); // 버퍼 리더 종료

soc.close();

ss.close();

}

}




 2. UDP 네트워크 통신

 ① 클라이언트

//package chapter11;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.io.IOException;

import java.util.Scanner;


public class UDP_Client

{

public static void main( String[] ar ) throws Exception

{

try

{

Scanner sc = new Scanner(System.in);

System.out.print("전송할 내용 : ");

String data = sc.next();

InetAddress ia = InetAddress.getByName("서버_IP주소");

DatagramPacket dp = new DatagramPacket(data.getBytes(),  //바이트 분할

      data.getBytes().length,  //바이트 길이

      ia,  //주소

      789  //포트번호

     );

DatagramSocket soc = new DatagramSocket();

soc.send(dp);

soc.close();

}catch(UnknownHostException e){ System.out.print("NW 에러 : " + e);

}catch(IOException e){ System.out.print("IO 에러 : " + e); }

}

}




 2. UDP 네트워크 통신

 ② 서버

//package chapter11;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;


public class UDP_Server

{

public static void main( String[] ar ) throws IOException

{

System.out.print("서버 준비중");

byte[] by = new byte[65508];

DatagramPacket dp = new DatagramPacket(by, by.length);

DatagramSocket soc = new DatagramSocket(789);

soc.receive(dp);

String str = new String(dp.getData()).trim();

System.out.print("str : " + str + "\n");

soc.close();

}

}




 3. 멀티캐스트 소켓 통신

//package chapter11;

import java.net.InetAddress;

import java.net.DatagramPacket;

import java.net.MulticastSocket;

import java.net.UnknownHostException;

import java.io.IOException;

import java.util.Scanner;


public class MulCastSocket

{

public static void main(String[] args)

{

try

{

Scanner sc = new Scanner(System.in);

System.out.print("전송물 : ");

String str = sc.next();

InetAddress ia = InetAddress.getByName("서버_IP주소");

DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, ia, 1000);

MulticastSocket ms = new MulticastSocket();//여기에 주의

ms.send(dp);

ms.close();

}catch(UnknownHostException e){ System.out.print("호스트가 존재하지 않습니다 : " + e);

}catch(IOException e){ System.out.print("NW에러 : " + e);

}

}

}






12장. DB연동(오라클 DB)

 0. 이클립스와 오라클 드라이버 연결설정


[오라클 DB관리 플러그인/드라이버 설정]





 1. DB기본연결 절차 및 형식

-> 추천자료: JDBC 프로그래밍 방법

//package chapter12;

import java.sql.DriverManager;

import java.sql.SQLException;


public class Exam131

{

public static void main(String[] args)

{

// 1단계. DB연결. 드라이브 설정

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

//System.out.print("드라이버 검색 성공\n");

}catch(ClassNotFoundException e){

System.out.print("드라이버 검색 실패 : " + e);

}


// 2단계. 연결

try

{

String url = "jdbc:oracle:thin:@오라클서버IP:포트번호:xe ";

String id = "hr";

String pass = "1234";

DriverManager.getConnection(url, id, pass);

//System.out.print("연결 성공\n");

}catch(SQLException e){ System.out.print("연결 실패 : " + e);

}

}

}




 2. DB 레코드 검색

-> ResultSet은 DB에서 1개 이상의 값을 뽑아올때 필요

//package chapter12;

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Date;


public class Exam134

{

public static void main(String[] args)

{

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql = null;

// 1단계. DB연결. 드라이브 설정

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

}catch(ClassNotFoundException e){ System.out.print("드라이버 에러 : " + e);

}

// 2단계. 연결관리 객체 생성

try

{

String url = "jdbc:oracle:thin:@오라클서버IP:포트번호:xe ";

String id = "hr";

String pass = "1234";

conn = DriverManager.getConnection(url, id, pass);

System.out.print("연결\n");

}catch(SQLException e){ System.out.print("연결에러 : " + e);

}

try

{

// 3단계. 작업관리

sql="select * from address";

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

// 0~n으로 쌓인 자료에 대한 커서는 0번지 앞에 있다.

// 4단계. 결과처리

while(rs.next())

{

int num = rs.getInt("num");

String name = rs.getString("name");

String phone = rs.getString("phone");

String email = rs.getString("mail");

String city = rs.getString("city");

Date birth = rs.getTimestamp("birth");

System.out.print(num + "\t" + name + "\t  " + phone + "\t"

+ email + "\t" + city + "\t" + birth + "\n");

}

rs.close();

pstmt.close();

conn.close();

}catch(SQLException e){ System.out.print("select 에러 : " + e);

}

}

}




 3. DB 레코드 삽입

-> 레코드를 추가하는데 ResultSet은 불필요.

//package chapter12;

import java.sql.DriverManager;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Scanner;


public class Exam135

{

public static void main(String[] args)

{

Connection conn = null;

PreparedStatement pstmt = null;

String sql = null;

try

{

Class.forName("oracle.jdbc.driver.OracleDriver");

}catch(ClassNotFoundException e){ System.out.print("드라이버 에러 : " + e);

}


try

{

String url = "jdbc:oracle:thin:@오라클서버IP:포트번호:xe"; //오라클 서버

String id = "hr";

String pass = "1234";

conn = DriverManager.getConnection(url, id, pass);

System.out.print("연결\n");

}catch(SQLException e){ System.out.print("연결에러 : " + e);

}

try

{

Scanner sc = new Scanner(System.in);

System.out.print("번호 : ");

int num = sc.nextInt();

System.out.print("이름 : ");

String name = sc.next();

System.out.print("전화번호 : ");

String phone = sc.next();

System.out.print("이메일 : ");

String mail = sc.next();

System.out.print("거주지 : ");

String city = sc.next();

System.out.print("생년월일 : ");

String birth = sc.next();

sql = "insert into address values(?, ?, ?, ?, ?, ?)";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1,  num);

pstmt.setString(2, name);

pstmt.setString(3, phone);

pstmt.setString(4, mail);

pstmt.setString(5, city);

pstmt.setString(6, birth);

pstmt.executeUpdate();

System.out.print("DB OK");

pstmt.close();

conn.close();

}catch(SQLException e){ System.out.print("입력에러 : " + e);

}

}

}






13장. GUI-SWING

JAVA: GUI프로그래밍 참조.

'프로그래밍note > 언어. JAVA & JDK 계열' 카테고리의 다른 글

JAVA: 이벤트처리  (0) 2012.08.23
JAVA: GUI 및 프레임  (2) 2012.08.21
이클립스: 설정 및 팁  (0) 2012.07.20
JAVA: 자바 기초 (3)  (0) 2012.07.17
JAVA: 자바 기초 (2)  (0) 2012.07.11