※ 네트워킹(Networking)
- 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것
- java.net 패키지를 사용하면 네트워크 어플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있음
통신의 3대 요소
1. 서버(Server) - 서비스를 제공하는 컴뷰터
ex ) 웹 브라우저 프로그램
2.클라이언트(Client) - 서비스를 사용하는 컴퓨터
ex ) 웹서버,DBMS
3.네트워크(Network) : 서버와 클라이언트를 연결해줌
=> 서버가 서비스를 제공하기위해서는 서버프로그램이 있어야하고
클라이언트가 서비스를 제공받기 위해서는 서버프로그램과 연결할 수 있는 클라이언트 프로그램이 있어야한다.
▶ InetAddress 패키지
- 자바에서는 IP 주소를 다루기 위한 클래스로 InetAddress 를 제공한다
ㄴIP주소 : 컴퓨터를 구별하는 데 사용되는 고유한 값
- 네트워크 주소
- 호스트 주소
▷ InetAddress 의 메서드
ex ) 1. host 에 주소 넣고 도메인, ip 얻어오기
2. ip 에 로컬호스트 호스트명과 IP 주소얻어오기
String host = "feelfreetothink.tistory.com";
InetAddress ip = null;
ip = InetAddress.getByName(host); // feelfreetothink.tistory.com/211.231.99.250
System.out.println("hostName:"+ip.getHostName());//도메인만 얻어옴 // feelfreetothink.tistory.com
System.out.println("hostAddress:"+ip.getHostAddress());//ip만 얻어옴 // 211.231.99.250
ip = InetAddress.getLocalHost();
System.out.println("hostName:"+ip.getHostName()); // DESKTOP-56VTHAK
System.out.println("hostAddress:"+ip.getHostAddress()+"\n"); //192.168.0.26
※ URL
- 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것
▶ 형태 :
http://www.java.com:80/book/source/test.jsp?id=hong#index1
프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조
프로토콜 : 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약 (http)
호스트명: 자원을 제공하는 서버의 이름(www.java.com)
포트번호: 통신에 사용되는 서버의 포트번호 (80)
- 포트 Port : 호스트(컴퓨터)가 외부와 통신을 하기 위한 통로
- 웹서버 포트번호: 80
- FTP 서버 포트번호 : 21
- DBMS 포트번호 : 1521
▶ URL 객체생성하기
URL url = new URL("http://www.java.com:80/book/source/test.jsp");
▶ URL 의 메서드
ex ) URL 로 가져온 웹사이트의 내용을 FILE로 저장
URL url
=new URL("http://www.yes24.com/24/category/bestseller?Gcode=100_012");
System.out.println("host : " + url.getHost());
ystem.out.println("port : " + url.getPort()); //-1 반환 => 기본 포트 사용한 경우
System.out.println("file : " + url.getFile());
URLConnection conn = url.openConnection(); // *URLConnection
System.out.println("파일 크기:" + conn.getContentLength());
System.out.println("ContentType:" + conn.getContentType());
// = > URLConnection을 생성하고 get메서드들을 통해서 관련 정보를 얻어서 출력
//URL과 연결된 URLConnection의 InputStream을 얻는다.
InputStream is=url.openStream();
br=new BufferedReader(new InputStreamReader(is));
fw = new FileWriter("text/yes24.txt");
bw = new BufferedWriter(fw);
String data="";
while((data=br.readLine())!=null) {
System.out.println(data);
bw.write(data);
bw.newLine(); //줄바꿈
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(br!=null) br.close();
if(bw!=null) bw.close();
} catch (IOException e) {
e.printStackTrace();
}
=> url 로 연결해서 stream 로 빨대꽂아서 웹페이지 내용을 문자기반으로 읽어와서(buffer이용해서)
읽어온내용을 stream 을 통해서 파일로 저장
▶ URLConnection : 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스
- URLConnection을 사용해서 연결하고자하는 자원에 접 근하고 읽고 쓰기를 할 수 있다
※ 소켓 프로그래밍
소켓(socket)
- 프로세스간의 통신에 사용되는 양쪽 끝 단
- 서로 멀리 떨어진 두 사람이 통신하기 위해서 전화기가 필요한 것처럼,
프로세스간의 통신을 위해서는 소켓이 필요하다
java.net 패키지 이용
- 소켓은 두 개의 스트림, 입력 스트림과 출력 스트림을 가지고 있으며,
이 스트림들은 연결된 상대편 소켓의 스트림들 과 교차연결된다
▶ TCP / IP
- 이기종 시스템간의 통신을 위한 표준 프로토콜
- TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있다
▶ 통신방식
▷ TCP 통신 방식 : 양방향 연결 기반 통신 방식(Connection Oriented 방식)
- [1] 서버와 클라이언트가 있어야 하고 [2] 서로 연결이 이뤄진 후 [3] 데이터를 주고 받는다
- 데이터를 전송하기 전에 먼저 상대편과 연결을 한 후에 데이터를 전송하며 잘 전송되었는지 확인.
전송을 실패했다면 해당 데이터를 재전송해줌.
- 서버
ServerSocket serverSocket=null;
serverSocket=new ServerSocket(7777); // 서버소켓 생성해서 7777번 포트와 결합
//서버소켓은 연결요청을 듣고만 있는 용도로 생성된것이다
Socket socket=null;
DataOutputStream dos=null; // 소켓생성
socket=serverSocket.accept(); // 연결요청이 들어오면 서버소켓이 받아서 소켓에 연결해줌
OutputStream os = socket.getOutputStream(); // 소켓의 출력스트림을 얻는다.
dos.writeUTF("서버가 데이터 보낸다!");//원격 소켓(remote socket)에 데이터를 보낸다.
if(dos!=null)dos.close();
if(socket!=null)socket.close();//스트림과 소켓을 닫아준다.
서버소켓은 클라이언트의 연결요청이 올 때까지 실행을 멈추고 계속 기다린다.
클라이언트의 연결요청이 오면 클라이언트 소켓과 통신할 새로운 소켓을 생성한다
- 클라이언트
String serverIp="192.168.0.26"; // 서버IP 지정
Socket socket=null;
DataInputStream dis=null;
socket=new Socket(serverIp, 7777); //소켓을 생성하여 연결을 요청한다
InputStream is=socket.getInputStream();
dis=new DataInputStream(is);//소켓의 입력스트림을 얻어서 DATAINPUTSTREAM 에 넣어줌
//소켓으로 부터 받은 데이터를 출력한다.
System.out.println("서버로부터 받은 메시지 : " + dis.readUTF());
if(dis!=null)dis.close();
if(socket!=null)socket.close();//스트림과 소켓을 닫는다.
▷ UDP 통신방식 : 비연결 기반 통신 방식
- 데이터를 전송하지만 데이터가 바르게 수신되었는지 확인하지 않음
따라서 TCP 에 비해 빠른 전송이 가능함
▶ TCP 소켓 프로그래밍
- 클라이언트와 서버간의 일대일 통신
- 서버프로그램 : 클라이언트의 연결요청 기다릴께
- 클라이언트 : 연결요청 보낼께
▷ 서버 프로그램과 클라이언트 프로그램간의 통신과정
1. 서버 프로그램에서는 서버소켓을 사용해서
서버 컴퓨터의 특정 포트에서 클라이언트의 연결 요청을 처리할 준비를 한다.
2. 클라이언트 프로그램은 접속할 서버의 IP 주소와 포트정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다. 3. 서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서
클라이언트의 소켓과 연결되도록 한다.
4. 이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계 없이 일대일 통신을 한다.
- 서버소켓 : 연결요청이 올 때마다 새로운 소켓을 생성하여 상대편 소켓과 통신할 수 있도록 연결함
- 소켓간의 연결만 처리하고, 실제 데이터는 소켓들끼리 서로 주고 받는다.
- 소켓들이 데이터를 주고받는 연결 통로는 입출력 스트림이다.
휴 UDP 정말 모르겠고 ... TCP 도 개념정리다시해야할것같고
무엇보다 스트림부터 우선 정복하고 네트워킹 다시 복습해야할것같음
'JAVA' 카테고리의 다른 글
[Java] ThreadLocal, 템플릿메서드 디자인패턴을 사용한 LogTrace 개발 (0) | 2025.04.02 |
---|---|
[JAVA] 이것이 자바다 !_6장 클래스 (0) | 2023.11.29 |
[JAVA] Thread 스레드 (0) | 2022.04.14 |
[JAVA] IO (0) | 2022.04.13 |
[JAVA] GUI / 계속 추가예정 (0) | 2022.04.11 |