- 각 지역에 흩어져 있는 방송국이 그물처럼 연결되어 전국적으로 같은 방송을 전달할 수 있도록 만들어진 형태의 방송망
- 컴퓨터 및 통신 분야에서 복수의 컴퓨터를 통신 회선으로 연결하여 사용하는 것
- 컴퓨터들끼리 서로 연결하여 데이터를 주고 받거나, 자원을 공유하는 용도로 사용
- java.net 패키지 제공
기본 용어
클라이언트 client / 서버 server
- 클라이언트 : 네트워크 상에서 서비스를 서버에 요청하는 컴퓨터(request)
- 서버 : 네트워크 상에서 클라이언트에 서비스를 제공(응답)하는 컴퓨터(response)
- http://thedata.kr/thecoding/coding/web-programming
IP Address
- 네트워크(인터넷)에서 컴퓨터를 구별할 때 사용하는 고유한 값
- 4바이트(32비트), 0~255의 정수
- 윈도우 ipconfig, 리눅스 ifconfig 명령어로 확인
포트 port / 소켓 socket
- 포트 : 네트워크에서 컴퓨터와 컴퓨터가 서로 연결되는 통로
- 소켓 : 특정 포트를 통해 양방향 통신이 가능하도록 만들어 주는 소프트웨어 장치(접속 끝단, endpoint)
URL
- 웹에 게시된 어떤 자원을 찾기 위한 인터넷의 자원 위치
- http://thedata.kr/thecoding/coding/web-programming
TCP/UDP
- OSI7 계층의 전송(Transport) 계층에 해당하는 프로토콜
- TCP(Transmission Control Protocol) : 연결 지향 프로토콜
- UDP( Universal,User Datagram Protocol) : 비 연결형 프로토콜
- http://thedata.kr/thecoding/coding/web-programming
네트워크 연결 순서
- 클라이언트에서 서버 연결 요청
- 서버에서 연결 수락 응답
- 클라이언트 서비스 요청
- 서버에서 서비스 응답
네트워크 관련 클래스
InetAddress 클래스
- 특정 IP 주소를 다루기 위한 클래스
package chapter19;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressEx {
public static void main(String[] args) {
try {
// getByName메서드로 InetAddress 객체 생성
InetAddress ip = InetAddress.getByName("www.google.co.kr");
System.out.println("hostname : " + ip.getHostName());
System.out.println("ip : " + ip.getHostAddress());
System.out.println("=============================");
// getLocalHost 메서드로 InetAddress 객체 생성 호출
InetAddress local = InetAddress.getLocalHost();
System.out.println("내컴퓨터 IP: " + local);
} catch (UnknownHostException e) {
System.out.println(e.getMessage());
}
}
}
URL 클래스
- 특정 URL 주소를 다루는 클래스
- openStream() : InputStream 리턴
- getConnection() : URLConnection 객체(추상클래스) 리턴
URL 자원 읽기
package chapter19;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
public class URLEx {
public static void main(String[] args) {
try {
URL url = null;
url = new URL("https://www.egovframe.go.kr/EgovIntro.jsp?menu=1&submenu=1");
System.out.println("authority : " + url.getAuthority());
System.out.println("content : " + url.getContent());
System.out.println("protocol : " + url.getProtocol());
System.out .println("host : " + url.getHost());
System.out.println("port : " + url.getPort());
System.out.println("path : " + url.getPath());
System.out.println("file : " + url.getFile());
System.out.println("query : " + url.getQuery());
// URL 을 통해서 정보 받기
int data = 0;
try {
Reader is = new InputStreamReader(url.openStream());
while ((data = is.read()) != -1) {
System.out.print((char) data);
}
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
TCP 소켓 프로그램
- 소켓을 이용하여 클라이언트와 서버간 1:1 통신하는 프로그램
- TCP는 서버 먼저 실행해서 클라이언트의 연결 요청 대기 (리스닝)
통신 순서
- 서버프로그램의 서버소켓 특정포트에서 클라이언트 연결 요청 리스닝
- 클라이언트소켓에서 서버 IP주소와 포트로 셔버 연결 요청
- 클라이언트의 연결 요청을 받은 서버는 새로운 소켓을 생성해서 클라이언트소켓과 연결
- 클라이언트소켓과 서버소켓 1:1 통신
Socket
- 클라이언트에서 서버 호스트 연결
- getInputStream() : 데이트터 입력 스트림
- getOutputStream() : 데이트터 출력스트림
ServerSocket
- 서버쪽에 생성
- accept() : 클라이언트 요청 리스닝 및 통신 위한 Socket 객체 리턴
- 클라이언트 송신 -> 서버 수신 -> 클라이언트 송신
TCP Server
package chapter19;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket socket = new ServerSocket(5000);
System.out.println("== Server Running!! ==");
while (true) {
Socket s = socket.accept();
InputStream is = s.getInputStream(); // 소켓과 스트림연결
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println("== Client Connected!! ==");
System.out.println(">> " + br.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TCPClient
메세지 한번 보내기
package chapter19;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 5000);
System.out.println("== Client Running!! ==");
OutputStream os = s.getOutputStream(); // 소켓과 스트림연결
OutputStreamWriter isr = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(isr);
pw.println("hi~~~hello");
pw.close();
s.close();
System.out.println("== Client Closed!! ==");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
메세지 반복 보내기
package chapter19;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class TCPClientLoop {
public static void main(String[] args) {
try {
System.out.println("== Client Running!! ==");
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("msg >> ");
String msg = sc.nextLine();
if(msg.equals("q")) break;
Socket s = new Socket("127.0.0.1", 5000);
OutputStream os = s.getOutputStream(); // 소켓과 스트림연결
OutputStreamWriter isr = new OutputStreamWriter(os);
PrintWriter pw = new PrintWriter(isr);
pw.println(msg);
pw.close();
s.close();
}
//pw.close();
System.out.println("== Client Closed!! ==");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
'Java' 카테고리의 다른 글
회원관리-배열 (0) | 2022.03.07 |
---|---|
JDBC (0) | 2022.03.07 |
입출력 Input / Output (0) | 2022.03.07 |
스레드 thread (0) | 2022.03.07 |
스트림 stream (0) | 2022.03.07 |