Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- abstract
- oracle
- 컬렉션프레임워크
- 객체 비교
- Java
- 대덕인재개발원
- EnhancedFor
- 생성자오버로드
- cursor문
- 다형성
- 메소드오버로딩
- NestedFor
- 환경설정
- 컬렉션 타입
- 어윈 사용법
- 정수형타입
- 추상메서드
- 자동차수리시스템
- 예외처리
- 집합_SET
- GRANT VIEW
- 참조형변수
- 오라클
- 사용자예외클래스생성
- exception
- 자바
- 제네릭
- 한국건설관리시스템
- 인터페이스
- 예외미루기
Archives
- Today
- Total
거니의 velog
230908_입출력 4 본문
[InetAddressTest.java]
package kr.or.ddit.basic;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressTest {
public static void main(String[] args) throws UnknownHostException {
// InetAddress 클래스 ==> IP주소를 다루기 위한 클래스
// www.naver.com의 IP정보 구하기
InetAddress ip = InetAddress.getByName("www.naver.com");
System.out.println("HostName : " + ip.getHostName()); // HostName : www.naver.com
System.out.println("HostAddress : " + ip.getHostAddress()); // HostAddress : 223.130.195.95
System.out.println("toString : " + ip.toString()); // toString : www.naver.com/223.130.195.95
System.out.println();
// 자신의 컴퓨터의 IP정보 구하기
InetAddress localIp = InetAddress.getLocalHost();
System.out.println("내 컴퓨터의 HostName : " + localIp.getHostName()); // 내 컴퓨터의 HostName : DESKTOP-EO4O3QL
System.out.println("내 컴퓨터의 HostAddress : " + localIp.getHostAddress()); // 내 컴퓨터의 HostAddress : 192.168.36.116
System.out.println("내 컴퓨터의 toString : " + localIp.toString()); // 내 컴퓨터의 toString : DESKTOP-EO4O3QL/192.168.36.116
System.out.println();
// IP주소가 여러 개인 호스트의 IP정보 가져오기
// InetAddress[] ipArr = InetAddress.getAllByName("www.naver.com");
// InetAddress[] ipArr = InetAddress.getAllByName("www.daum.net");
InetAddress[] ipArr = InetAddress.getAllByName("www.nate.com");
for(InetAddress nIp : ipArr) {
System.out.println("toString : " + nIp.toString());
}
// toString : www.naver.com/223.130.195.95
// toString : www.naver.com/223.130.195.200
// toString : www.daum.net/121.53.105.193 -> 접속 안됨
// toString : www.nate.com/120.50.131.112
}
}
[URLTest01.java]
package kr.or.ddit.basic;
import java.net.MalformedURLException;
import java.net.URL;
public class URLTest01 {
public static void main(String[] args) throws MalformedURLException {
// URL 클래스 ==> 인터넷에 존재하는 서버들의 자원에 접근할 수 있는 주소를 다루는 클래스
// URL주소 구조
// ==> 프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조
// 예) https://ddit.or.kr:443/index.html?tttt=123
// URL url = new URL("https://ddit.or.kr:443/index.html?tttt=123");
URL url = new URL("https", "ddit.or.kr", 443, "index.html?tttt=123");
System.out.println("URL 클래스를 이용한 URL 정보 출력하기");
System.out.println("Protocol : " + url.getProtocol());
System.out.println("Host : " + url.getHost());
System.out.println("Port : " + url.getPort());
System.out.println("File : " + url.getFile());
System.out.println("Path : " + url.getPath());
System.out.println("Query : " + url.getQuery());
System.out.println();
System.out.println(url.toExternalForm()); // https://ddit.or.kr:443index.html?tttt=123
// URL 클래스를 이용한 URL 정보 출력하기
// Protocol : https
// Host : ddit.or.kr
// Port : 443
// File : index.html?tttt=123
// Path : index.html
// Query : tttt=123
}
}
[URLTest02.java]
package kr.or.ddit.basic;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class URLTest02 {
public static void main(String[] args) throws IOException {
// URLConnection 클래스 ==> 애플리케이션과 URL간의 통신 연결을 위한 클래스
// 특정 서버의 정보와 URL의 내용을 가져와 출력하는 예제
URL url = new URL("https://www.naver.com/index.html");
// URLConnection 객체 구하기 ==> URL객체를 이용하여 구한다.
URLConnection urlCon = url.openConnection();
// Header정보 가져오기
// ==> 구한 Map객체의 key값은 Header정보의 이름을 나타내고
// value값은 Header정보의 값을 나타낸다.
Map<String, List<String>> headerMap = urlCon.getHeaderFields();
for(String headerKey : headerMap.keySet()) {
System.out.println(headerKey + " : " + headerMap.get(headerKey));
}
System.out.println("--------------------------------------------");
}
}
[URLTest02.java]
package kr.or.ddit.basic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class URLTest02 {
public static void main(String[] args) throws IOException {
// URLConnection 클래스 ==> 애플리케이션과 URL간의 통신 연결을 위한 클래스
// 특정 서버의 정보와 URL의 내용을 가져와 출력하는 예제
URL url = new URL("https://www.naver.com/index.html");
// URLConnection 객체 구하기 ==> URL객체를 이용하여 구한다.
URLConnection urlCon = url.openConnection();
// Header정보 가져오기
// ==> 구한 Map객체의 key값은 Header정보의 이름을 나타내고
// value값은 Header정보의 값을 나타낸다.
Map<String, List<String>> headerMap = urlCon.getHeaderFields();
for(String headerKey : headerMap.keySet()) {
System.out.println(headerKey + " : " + headerMap.get(headerKey));
}
System.out.println();
System.out.println("--------------------------------------------");
System.out.println();
// 해당 URL이 지정한 문서의 내용을 가져오기 (즉 index.html 문서 내용 가져오기)
// 방법1 ==> URLConnection 객체를 이용하는 방법
// 파일을 가져오기 위한 입력 스트림 객체 생성
// 바이트 기반 스트림을 문자 기반 스트림으로 바꿔줘야 한다.
InputStream in = urlCon.getInputStream();
InputStreamReader isr = new InputStreamReader(in, "utf-8");
BufferedReader br = new BufferedReader(isr);
// 자료 내용을 읽어와 화면에 출력하기
while(true) {
String str = br.readLine(); // 한 줄씩 읽어오기
if(str == null) break;
System.out.println(str);
}
br.close();
// 방법2 ==> URL 객체를 이용하는 방법
}
}
package kr.or.ddit.basic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
public class URLTest02 {
public static void main(String[] args) throws IOException {
// URLConnection 클래스 ==> 애플리케이션과 URL간의 통신 연결을 위한 클래스
// 특정 서버의 정보와 URL의 내용을 가져와 출력하는 예제
URL url = new URL("https://www.naver.com/index.html");
// URLConnection 객체 구하기 ==> URL객체를 이용하여 구한다.
URLConnection urlCon = url.openConnection();
// Header정보 가져오기
// ==> 구한 Map객체의 key값은 Header정보의 이름을 나타내고
// value값은 Header정보의 값을 나타낸다.
Map<String, List<String>> headerMap = urlCon.getHeaderFields();
for(String headerKey : headerMap.keySet()) {
System.out.println(headerKey + " : " + headerMap.get(headerKey));
}
System.out.println();
System.out.println("--------------------------------------------");
System.out.println();
// 해당 URL이 지정한 문서의 내용을 가져오기 (즉 index.html 문서 내용 가져오기)
// 방법1 ==> URLConnection 객체를 이용하는 방법
// 파일을 가져오기 위한 입력 스트림 객체 생성
// 바이트 기반 스트림을 문자 기반 스트림으로 바꿔줘야 한다.
// InputStream in = urlCon.getInputStream();
// InputStreamReader isr = new InputStreamReader(in, "utf-8");
// BufferedReader br = new BufferedReader(isr);
//
// // 자료 내용을 읽어와 화면에 출력하기
// while(true) {
// String str = br.readLine(); // 한 줄씩 읽어오기
// if(str == null) break;
// System.out.println(str);
// }
//
// br.close();
// 방법2 ==> URL 객체를 이용하는 방법 (URL 객체의 openStream() 메서드 이용)
InputStream in2 = url.openStream();
BufferedReader br2 = new BufferedReader(new InputStreamReader(in2, "utf-8"));
String temp;
while( (temp = br2.readLine()) != null ) {
System.out.println(temp);
}
br2.close();
}
}
[TcpServer01.java]
package kr.or.ddit.basic.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer01 {
public static void main(String[] args) {
try {
// TCP 소켓 통신을 하기 위해 ServerSocket 객체를 생성한다.
ServerSocket server = new ServerSocket(7777);
System.out.println("클라이언트의 접속을 기다립니다...");
// accept()메서드
// ==> 클라이언트에서 연결 요청이 올 때까지 기다린다.
// ==> 연결 요청이 오면 새로운 Socket 객체를 생성해서
// 클라이언트의 Socket과 연결한다.
Socket socket = server.accept();
// 이 부분부터는 클라이언트와 연결이 완료된 이후에 처리할 내용을 작성한다.
System.out.println("클라이언트와 연결되었습니다...");
System.out.println();
// 상대방과 연결된 Socket객체를 이용하여 상대방의 정보를 구할 수 있다.
System.out.println("접속된 상대방의 정보");
System.out.println("IP주소 : " + socket.getInetAddress().getHostAddress());
System.out.println("Port 번호 : " + socket.getPort());
System.out.println();
System.out.println("연결된 내 컴퓨터 정보");
System.out.println("IP주소 : " + socket.getLocalAddress());
System.out.println("Port번호 : " + socket.getLocalPort());
System.out.println();
// 클라이언트에게 메시지 보내기
// Socket의 OutputStream객체를 이용해서 전송한다.
// ( Socket의 getOutputStream()메서드로 스트림 객체를 구한다.)
OutputStream out = socket.getOutputStream();
// 바이트 기반 스트림 -> 문자 기반 스트림으로 변환되도록 보조 스트림 추가
DataOutputStream dout = new DataOutputStream(out);
// 클라이언트에게 데이터(메시지) 보내기
// ==> Socket을 이용해서 구한 OutputStream의 출력 메서드를 사용하면 된다.
dout.writeUTF("환영합니다... 어서오세요...");
System.out.println("메시지를 보냈습니다...");
// 사용했던 스트림과 소켓 닫기
dout.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[TcpClient01.java]
package kr.or.ddit.basic.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class TcpClient01 {
public static void main(String[] args) {
/*
* 통신에서 현재 자신의 컴퓨터를 나타내는 방법
* 1) 원래의 IP주소 : 예) 192.168.36.116
* 2) 지정된 IP주소 : 127.0.0.1
* 3) 원래의 컴퓨터 이름 : 예) DESKTOP-EO4O3QL
* 4) 지정된 컴퓨터 이름 : localhost
*/
try {
String serverIp = "localhost";
System.out.println(serverIp + " 서버에 연결 중 입니다...");
// 서버의 IP주소와 Port번호를 지정하여 Socket객체를 생성한다.
// Socket객체는 생성이 완료되면 자동으로 지정된 서버로 요청 신호를 보낸다.
Socket socket = new Socket(serverIp, 7777);
// 이 부분부터는 서버와 연결이 완료된 이후에 처리할 내용을 작성한다.
System.out.println("서버에 연결되었습니다...");
System.out.println();
// 서버가 보내온 메시지를 받아서 화면에 출력하기
// Socket을 이용하여 InputStream객체를 구한다.
// ==> Socket객체의 getInputStream()메서드를 이용한다.
InputStream in = socket.getInputStream();
// 바이트 기반 스트림 -> 문자 기반 스트림으로 변환되도록 보조 스트림 추가
DataInputStream din = new DataInputStream(in);
// 스트림 객체의 읽기 메서드를 사용해서 데이터를 받는다.
System.out.println("서버에서 보내온 메시지 : " + din.readUTF());
System.out.println();
System.out.println("연결을 종료합니다...");
// 스트림과 소켓 닫기
din.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
이클립스로는 서버 2개를 동시에 실행하지 못한다.
탐색기를 열자.
D:\A_TeachingMaterial\03_HighJava\workspace\javaNetworkTest\bin
- cmd를 주소창에 쳐서 명령 프롬프트를 두 개 연다. 하나는 서버용, 하나는 클라이언트용
- 서버용 : java kr.or.ddit.basic.tcp.TcpServer01
- 클라이언트용 : java kr.or.ddit.basic.tcp.TcpClient01
두 개의 클래스 파일이 실행되는 순간 소켓이 작동한다.
[TcpServer02.java]
package kr.or.ddit.basic.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer02 {
public static void main(String[] args) {
try {
// TCP 소켓 통신을 하기 위해 ServerSocket 객체를 생성한다.
ServerSocket server = new ServerSocket(7777);
System.out.println("클라이언트의 접속을 기다립니다...");
Socket socket = server.accept();
System.out.println("클라이언트와 연결되었습니다...");
System.out.println();
// 데이터 송수신을 위한 스트림 객체 생성
// 수신용
DataInputStream din = new DataInputStream(socket.getInputStream());
// 송신용
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
while(true) {
// 클라이언트가 보낸 메시지를 받는다.
String str = din.readUTF();
if(str.equals("/end")) break;
System.out.println("클라이언트가 보낸 메시지 : " + str);
// 클라이언트가 보낸 메시지를 그대로 돌려 준다.
dout.writeUTF(str);
}
dout.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[TcpClient02.java]
package kr.or.ddit.basic.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try {
String serverIp = "localhost";
System.out.println(serverIp + " 서버에 연결 중 입니다...");
Socket socket = new Socket(serverIp, 7777);
// 이 부분부터는 서버와 연결이 완료된 이후에 처리할 내용을 작성한다.
System.out.println("서버에 연결되었습니다...");
System.out.println();
// 데이터 송수신을 위한 스트림 객체 생성
// 수신용
DataInputStream din = new DataInputStream(socket.getInputStream());
// 송신용
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
// 서버가 보내온 메시지를 받아서 화면에 출력하기
while(true) {
System.out.print("서버로 보낼 메시지 입력 >> ");
String str = sc.nextLine();
// 입력받은 메시지를 서버로 전송한다.
dout.writeUTF(str);
if(str.equals("/end")) break;
System.out.println("서버가 보낸 메시지 : " + din.readUTF());
}
System.out.println("연결을 종료합니다...");
// 스트림과 소켓 닫기
din.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 서버용 : java kr.or.ddit.basic.tcp.TcpServer02
- 클라이언트용 : java kr.or.ddit.basic.tcp.TcpClient02
'대덕인재개발원 > 대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230912_입출력 6 (0) | 2023.09.11 |
---|---|
230911_입출력 5 (0) | 2023.09.11 |
230907_입출력 3 (2) | 2023.09.07 |
230906_입출력 2 (0) | 2023.09.06 |
230905_입출력 1 (0) | 2023.09.04 |