1)InetAddress
package practice0502Network;
import java.net.InetAddress;
public class InetAddressTest {
public static void main(String[] args) {
// IP주소와 도메인 이름을 다루기 위한 클래스 InetAddress
InetAddress addr = null;
InetAddress[] addrArr = null;
String name = "www.naver.com";
try {
//인수 name에 대한 도메인 IP정보를 얻은 후
//도메인명과 IP주소를 각기 출력
addr= InetAddress.getByName(name);
System.out.println("도메인명: " +addr.getHostName());
System.out.println("IP주소: " +addr.getHostAddress());
System.out.println("도메인명과 IP주소 : " +addr);
System.out.println("-------------------");
//인수 name에 대한 도메인과 IP정보 목록을
//배열에 저장 후 배열내용 출력
addrArr = InetAddress.getAllByName(name);
for(int i =0; i<addrArr.length; i++) {
System.out.println("IP 목록 [" + i + "]" +addrArr[i]);
}
System.out.println("--------------------");
//로컬호스트의 도메인명과 IP 주소 정보를 addr에 할당 하고
//도메인명과 IP 주소를 각기 출력
addr = InetAddress.getLocalHost();
System.out.println("로컬호스트 도메인명 -"+addr.getHostName());
System.out.println("로컬호스트 IP주소 -"+addr.getHostAddress());
}catch(Exception e) {
e.printStackTrace();
}
}
}
2)URL
package practice0502Network;
import java.net.URL;
public class UrlTest1 {
public static void main(String[] args) {
// URL: Uniform Resource Locator
// 인터넷 강의 서버들이 제공하는 다양한 자원들에 접근하기 위한 주소
// 도메인명과 IP주소는 인터넷 상의 호스트 자체의 이름과 주소이고
// URL은 호스트 내의 서버가 가지고 있는 특정 자원에 대한 주소
// https://v.daum.net/v/20230502133610208
// 프로토콜(약속), 호스트이름, 호스트내의 디렉토리, 자원의 이름
try {
// 지정된 자원을 인수로 URL객체 생성
URL url = new URL("https://docs.oracle.com/javase/tutorial/essential/index.html");
// URL 클래스가 제공하는 메소드들을 이용하여 해당 자원에 대한 정보를 출력
System.out.println("getAuthority(): " + url.getAuthority());
System.out.println("getContent(): " + url.getContent());
System.out.println("getDefaultPort(): " + url.getDefaultPort());
System.out.println("getPort(): " + url.getPort());
System.out.println("getFile(): " + url.getFile());
System.out.println("getHost(): " + url.getHost());
System.out.println("getPath(): " + url.getPath());
System.out.println("getProtocol(): " + url.getProtocol());
System.out.println("getQuery(): " + url.getQuery());
System.out.println("getRef(): " + url.getRef());
System.out.println("getUserInfo(): " + url.getUserInfo());
System.out.println("toExternalForm(): " + url.toExternalForm());
System.out.println("toURI(): " + url.toURI());
} catch (Exception e) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class UrlTest2 {
public static void main(String[] args) {
try {
//지정된 인수로 URL 객체를 생성
URL page = new URL("https://docs.oracle.com/javase/tutorial/essential/index.html");
//openStream메소드로 입력 스트림 객체를 생성해서 is에 할당
InputStream is = page.openStream();
//버퍼를 이용하는 버퍼 입출력 객체를 생성
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
FileWriter fw = new FileWriter("urltest.html");
BufferedWriter bw = new BufferedWriter(fw);
//자원을 라인 단위로 읽고 기록
String line = br.readLine();
while(line != null) {
bw.write(line);
line = br.readLine();
}
br.close();
bw.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
※JAVA에서 네트워크 프로그래밍을 하는 절차
1. 네트워크와 연결된 어떤 존재(객체)를 얻어낸다
2. 데이터를 읽고 싶다면 InputStream을 연결한다
3. 데이터를 쓰고 싶다면 OutputStream을 연결한다
4. 이후의 모든 작업은 입출력 프로그래밍과 동일하다
※TCP vs UDP
TCP : 연결지향형, 핸드쉐이크(악수), 안정성 좋음, 속도 soso
UDP : 일방적, 비연결형, 확인절차 없음, 안정성 보장x, 속도 good
즉, TCP는 신뢰성 있는 데이터 전송을 필요로 하는 애플리케이션에서 사용하고,
UDP는 속도가 중요하고 오류나 유실에 대한 처리가 적은 애플리케이션에서 사용됩니다.
※Socket : 네트워크를 통해 메시지를 주고받는 장치(객체)
네트워크 통신을 흔히 소켓통신이라고도 함.
※패킷 : 네트워크에 전송되는 조각난 데이터
프로토콜 : 조각난 데이터를 어떻게 다시 졸비할 건지에 대한 약속
※포트 : 채널의 개념
※서버-클라이언트
서버 : 서비스를 제공(응답)하는 쪽 >요청없이 응답하지 않소
클라이언트 : 요청하는 쪽
※소켓서버를 만든다
- 클라이언트의 접속을 기다린다
클라이언트 측 소켓을 만든다
-서버에 접속을 요청한다
3)ServerSocket
먼저 아래실행시켜서 서버열고 클라로그인
①
package practice0502Network;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String[] args) {
ServerSocket serverSocket =null;
Socket socket =null;
try {
//포트번호 8111열고 클라이언트 기다리겠다
serverSocket = new ServerSocket(8112);
System.out.println("클라이언트 연결 대기중....");
socket = serverSocket.accept(); //클라이언트 기다림
System.out.println("클라이언트 연결: " + socket);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package practice0502Network;
import java.io.IOException;
import java.net.Socket;
public class SocketTest {
public static void main(String[] args) {
//클라이언트는 서버주소와 포트번호를 알아야한다
Socket socket = null;
try {
socket = new Socket("localhost", 8111);
System.out.println("연결되었슴미다" + socket);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
▼▼서버▼▼
▼▼클라이언트쪽▼▼
오우쉣.. 다른예시로 볼까나

②
package practice0502Network;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer1 {
public static void main(String[] args) {
Socket socket = null;
OutputStream out = null;
try (ServerSocket serverSocket = new ServerSocket(8222)) {
System.out.println("서버준비완료..");
socket = serverSocket.accept(); //클라이언트 기다림
System.out.println("클라이언트 연결완료...");
byte[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
out = socket.getOutputStream();
out.write(arr);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.Arrays;
public class SimpleClient1 {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8222)){
System.out.println("서버연결완료");
InputStream in = socket.getInputStream();
byte [] basket = new byte[10];
in.read(basket);
System.out.println(Arrays.toString(basket));
} catch (IOException e) {
e.printStackTrace();
}
}
}
▼▼서버▼▼
▼▼클라이언트쪽▼▼
또 다른예시 젭알그만..
③

package practice0502Network;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer2 {
public static void main(String[] args) {
Socket socket = null;
OutputStream out = null;
DataOutputStream dos = null;
String str = "이 문자열은 몇 바이트인지 모르겠습니다만...?";
try (ServerSocket serverSocket = new ServerSocket(8222)){
System.out.println("서버 준비 완료!");
socket = serverSocket.accept();
System.out.println("클라이언트 연결 완료;;");
out = socket.getOutputStream();
dos = new DataOutputStream(out);
dos.writeUTF(str);
}catch(Exception e ) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleClient2 {
public static void main(String[] args) {
InputStream in = null;
DataInputStream dis = null;
try (Socket socket = new Socket("localhost", 8222)){
System.out.println("서버연결 완료s");
in = socket.getInputStream();
dis = new DataInputStream(in);
String msg = dis.readUTF();
System.out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
▼▼서버▼▼
▼▼클라이언트쪽▼▼
이제 끝인가?;;

이제는 client 가 out을 해보자

굳이 반대로해야하나요 선생님..

일어나지못할까..
④
package practice0502Network;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) {
Socket socket = null;
InputStream in = null;
DataInputStream dis = null;
try (ServerSocket serverSocket = new ServerSocket(8111)){
System.out.println("서버준비 완료..");
socket = serverSocket.accept();
System.out.println("클라이언트 접속완료");
in = socket.getInputStream();
dis = new DataInputStream(in);
String msg = dis.readUTF();
System.out.println("서버가 받은 메시지 " +msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class EchoClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
OutputStream out = null;
DataOutputStream dos = null;
try(Socket socket = new Socket("localhost", 8111)) {
System.out.println("서버연결 완료");
out = socket.getOutputStream();
dos = new DataOutputStream(out);
System.out.println("서버로 전송할 메시지를 입력하세요");
String msg = sc.nextLine();
dos.writeUTF(msg);
}catch(Exception e ) {
e.printStackTrace();
}
}
}
반복문을 사용해보자.. 메시지 여러번 전송해보자

package practice0502Network;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class EchoServer {
public static void main(String[] args) {
Socket socket = null;
InputStream in = null;
DataInputStream dis = null;
try (ServerSocket serverSocket = new ServerSocket(8112)) {
System.out.println("서버준비 완료..");
socket = serverSocket.accept();
System.out.println("클라이언트 접속완료");
in = socket.getInputStream();
dis = new DataInputStream(in);
while (true) {
String msg = dis.readUTF();
System.out.println("서버가 받은 메시지 " + msg);
if (msg.equals("종료")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class EchoClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
OutputStream out = null;
DataOutputStream dos = null;
try (Socket socket = new Socket("localhost", 8112)) {
System.out.println("서버연결 완료");
out = socket.getOutputStream();
dos = new DataOutputStream(out);
while (true) {
System.out.println("서버로 전송할 메시지를 입력하세요");
String msg = sc.nextLine();
dos.writeUTF(msg);
if (msg.equals("종료")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
⑤교재에 있는거로 하나만 더하자 ~

채팅프로그램이야 일어나!! 시불탱 아니 아차차..쏘리

package practice0502Network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try (ServerSocket serverSocket = new ServerSocket(5000)) {
System.out.println("연결 waiting중..");
socket = serverSocket.accept();
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("클라이언트와 연결완료");
while (true) {
String msg = in.readLine();
if (msg.equalsIgnoreCase("quit")) {
System.out.println("클라이언트에서 연결을 종료하였습니다만");
break;
}
System.out.println("클라이언트가 보낸 메시지 " + msg);
System.out.println("클라이언트에게 보낼 메시지를 입력하세요 ");
System.out.print(">>");
String omsg = sc.nextLine();
out.write(omsg +"\n");
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package practice0502Network;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BufferedReader in = null;
PrintWriter out = null;
try (Socket socket = new Socket("localhost",5000)){
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg ="";
while(true) {
System.out.println("서버로 보낼 메시지를 입력하세요");
System.out.print(">> ");
msg = sc.nextLine();
if(msg.equalsIgnoreCase("quit")) {
out.println(msg);
out.flush();
break;
}
out.println(msg);
out.flush();
msg = in.readLine();
System.out.println("서버로 부터 온 메시지 : "+ msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


'수업시간 JAVA > 이론' 카테고리의 다른 글
스레드 실행(상속/인터페이스) / join / System.currentTimeMillis() (0) | 2023.05.08 |
---|---|
Thread/Process 개념 (0) | 2023.05.08 |
복습 파일 output친구들 (0) | 2023.05.02 |
복습 파일 Input친구들 (0) | 2023.05.02 |
Map (0) | 2023.04.26 |