일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Gradle
- Oracle
- AWS
- Spring
- Spring Batch
- elasticsearch
- 요리
- laravel
- JVM
- Spring Boot
- java
- php
- devops
- ReactJS
- Git
- javascript
- IntelliJ
- MySQL
- tool
- linux
- jenkins
- springboot
- ubuntu
- Design Patterns
- redis
- Web Server
- jsp
- 맛집
- db
- it
- Today
- Total
아무거나
JAVA 네트워크 본문
[JAVA 네트워크]
JAVA는 다른 언어에 비해 네트워크 기능이 뛰어난다. 그 외에도 다양한 API가 많은 고수준의 언어이다.
1. InetAddress
-> 호스트의 IP주소를 비롯한 네트워크상의 정보를 얻어오는 클래스 입니다.
ex) [MainClass.java]
public class MainClass {
public static void main(String[] args) {
new InetAdressEx();
}
}
[InetAdressEx.java]
import java.net.InetAddress;
import java.util.Scanner;
public class InetAdressEx {
Scanner scanner;
public InetAdressEx() {
System.out.println("Host 이름을 입력하세요");
scanner = new Scanner(System.in);
try {
InetAddress inetAddress = InetAddress.getByName(scanner.next());
System.out.println("Computer NAME : " + inetAddress.getHostName());
System.out.println("Computer IP : " + inetAddress.getHostAddress());
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
[결과]
Host 이름을 입력하세요
www.google.com
Computer NAME : www.google.com
style="white-space:pre"> Computer IP : 74.125.204.105
2. URLConnection
-> (1) URL 클래스 : DNS를 통한 IP정보를 이용하여, URL객체를 만든 후 네트워크 접속 및 URL정보를 얻어 온다.
ex) www.naver.com -> DNS(영어의 글자(www.naver.com) 같다가 IP주소를 찾게 만들어 준다.) -> IP(xxx.xxx.xxx.xxx)
(2) URLConnection 클래스 : 추상클래스로 URL객체로부터 생성 됩니다. URL클래스의 openConnection() 메소드를 이용한다.
ex) [MainClass.java]
public class MainClass {
public static void main(String[] args) {
new URLConEx();
}
}
[URLConEx.java]
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
public class URLConEx {
public URLConEx() {
String code = null;
System.out.println("웹 주소를 입력 하세요.");
Scanner scanner = new Scanner(System.in);
String address = scanner.next();
try {
URL url = new URL(address); // 네트워크 접속해서 URL정보 얻어옴
URLConnection con = url.openConnection(); // URL커넥션
BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream())); // 데이터를 가져올 준비를 함
FileWriter fw = new FileWriter("C:\\Users\\bkjeon\\Desktop\\file.html"); // 한줄씩 계속 읽어서 뽑아옴
while ((code = webData.readLine()) != null) {
fw.write(code); // 한줄씩 쓴다.
}
System.out.println("The End");
fw.close();
webData.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
[결과]
웹 주소를 입력 하세요.
http://www.google.com
The End
* http://www.google.com 에서 읽어온 내용을 html 파일로 저장.
3. Socket의 이해
-> 네트워크상에서 서로 다른 호스트 사이의 통신을 위한 수단
SERVER(socket) <-----------------------> CLIENT(socket)
I/O stream
(1) Server에서 ServerSocket을 만들고, 클라이언트의 요청을 기다림.
(2) Client에서 Socket을 만들고, I/O Stream을 만들어 Server로 요청을 함.
(3) Server에서 Client의 요청을 받아 Socket을 만들고, I/O Stream읆 ㅏㄴ듬.
(4) 통신함
(5) Socket 닫음.
ex) [MakeServerSocket.java]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MakeServerSocket {
ServerSocket serverSocket = null; // Server 소켓
Socket socket = null; // Socket 객체
PrintWriter writer = null; // 출력(Client한테 보낼때 사용하는 Writer)
BufferedReader reader = null; // 데이터를 읽어올때 사용
String lineStr;
public MakeServerSocket() {
try {
serverSocket = new ServerSocket(2000);
while (true) {
socket = serverSocket.accept(); // client에서 요청이 왔을 때 다시 응답을 해줄 소켓이 반환되서 나온다.
System.out.println("Client 요청");
writer = new PrintWriter(socket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Client에서 온거를 읽어서 출력스트림(write)에다가 다시 쓴다.
// 즉, Client에서 온것을 그대로 읽어서 응답해준다.
while ((lineStr = reader.readLine()) != null) {
writer.write(lineStr);
System.out.println("input : " + lineStr);
}
writer.close();
reader.close();
socket.close();
}
} catch (Exception e) {}
}
public static void main(String[] args) {
new MakeServerSocket();
}
}
[MakeClientSocket.java]
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MakeClientSocket {
Socket socket = null; // server 소켓처럼 client 소켓을 기다릴 필요가 없으므로 socket 객체 하나만 만든다.
PrintWriter writer = null;
BufferedReader reader = null;
public MakeClientSocket() {
try {
socket = new Socket("localhost", 2000);
writer = new PrintWriter(socket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = null;
BufferedReader sReader = new BufferedReader(new InputStreamReader(System.in));
while ((str = sReader.readLine()) != null) {
writer.println(str);
System.out.println("output:" + str);
}
writer.close();
reader.close();
sReader.close();
socket.close();
} catch (Exception e) {}
}
public static void main(String[] args) {
new MakeClientSocket();
}
}
[결과]
(1) client
ㅎㅇ
output:ㅎㅇ
(2) server
Client 요청
input : ㅎㅇ
'Java & Kotlin > Java' 카테고리의 다른 글
[Design Pattern] Strategy Pattern (0) | 2019.10.27 |
---|---|
iterator vs foreach (0) | 2019.08.17 |
JAVA 그래픽 (0) | 2019.08.16 |
스레드(Thread) (0) | 2019.08.16 |
입출력(I/O) (0) | 2019.08.16 |