본문 바로가기
JAVA

221031 Network

2.Network
=>다른 컴퓨터와 통신을 하기 위해서는 다른 컴퓨터의 프로그램이나 자원에 접근하기 위한 주소를 알아야 합니다.
프로그램에 접근할 때는 IP(컴퓨터를 구분하기 위한 주소)와 포트(프로세스를 구분하기 위한)번호 또는 Domain을 알아야 합니다.

1)통신 절차
=>요청을 처리하는 쪽에서 '포트번호를 가지고 소켓을 생성'해서 시작
=>요청을 보내는 쪽에서 요청을 처리하는 쪽의 구별하기 위한 주소를 가지고 접속을 하고 요청을 전송
=>요청을 처리하는 쪽에서 요청을 보내는 쪽의 데이터(parameter)를 읽어서 처리를 수행한 후 처리 결과를 요청을 보내는 쪽으로 전송합니다.
=>요청을 보내는 것을 request라고 하고 요청을 처리해서 결과를 전송하는 것을 response라고 합니다.

2)TCP형태로 클라이언트와 서버가 대화를 주고받는 것(클라이언트가 서버에게 전송하면 서버가 다시 응답하는 것)
=>TCP 서버 생성
=>TCPClient 작성: 자기 컴퓨터에 전송할 때는 127.0.0.1이나 localhost라고 하면 됩니다.

외부의 컴퓨터에 접속하기 위해서는 그 컴퓨터의 주소가 필요합니다->명령프롬포트에서 ipconfig 실행
외부의 컴퓨터에서 내 컴퓨터로 데이터가 전송이 가능하도록 할 때는 방화벽을 해제해 주어야 합니다.

※반드시 서버를 먼저 실행시키고, 그 다음 클라이언트를 실행시켜야 함

TCP Server

package java_1031.network;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
	public static void main(String[] args) {
		//try-resources 구문으로 메모리 해제를 하지 않아도 됨
		try{
			System.out.println("서버 대기 중...");
			
			//클라이언트의 요청 대기
			try {
				Socket socket = null;
				while(true) {
					ServerSocket ss = new ServerSocket(9999);
					//클라이언트의 요청을 대기하다가 클라이언트의 요청이 오면 접속됨
					socket = ss.accept();
					//접속자 정보 출력
					System.out.println("접속자 정보:"+socket.toString());
					//접속자와 문자열을 읽을 수 있는 스트림을 생성
					BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					//한 줄의 메시지 읽기
					String message=br.readLine();
					System.out.println(message);
					
					//메시지를 보낼 수 있는 스트림을 생성
					PrintWriter pw = new PrintWriter(socket.getOutputStream());
					pw.println("서버가 보내는 메시지");
					pw.flush();
					
					//정리 작업
					pw.close();
					br.close();
					ss.close();
				}
			} catch (Exception e) {
				
			}finally {
				
			}
			
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
		}
	
	}

}

 

TCP Client

package java_1031.network;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class TCPClient {
	public static void main(String[] args) {
		//자기 컴퓨터에 전송할 때는 127.0.0.1.입니다.
		try(Scanner scan = new Scanner(System.in)){
			
			while(true) {
				Socket socket = new Socket(InetAddress.getByName("172.30.1.2"),9999);
				System.out.print("보낼 메시지:");
				String message = scan.nextLine();
				
				//메시지 보내기
				PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);
				pw.println(message);
				pw.flush();
				
				//메시지 받기
				BufferedReader br = new BufferedReader(
						new InputStreamReader(socket.getInputStream()));
				String response = br.readLine();
				System.out.println(response);
				
				
				socket.close();
				br.close();
				pw.close();
			}
		} catch (Exception e) {
			System.out.println(e.getLocalizedMessage());
		}
		
		
		
	}
}

옆 컴퓨터와 연결, 반복문 안에 소켓생성이 있어 계속 메시지를 주고받을 수 있음

서버에서 "서버가 보내는 메시지"를 스캔형식으로 바꾸면, 한쪽 컴퓨터에서는 서버를 키고 다른 한쪽 컴퓨터에서는 클라이언트만 키는 형식으로도 연결되어 메시지를 주고받을 수 있다.



에러 메시지

예: Address already in use: bind
이 포트를 이미 실행중이기 때문

예:Connection refused: connect

연결된 서버가 켜지지 않았기 때문

 

 

 








/*
★지금 인터넷은 HTTP가 아니라 HTTPS.
Protocol : 장비 사이의 데이터 송수신을 위한 규칙-TCP(연결형), UDP(비연결형)
URI-인터넷에 있는 자원을 나타내는 유일한 주소
URL-URI의 하위 항목
URN

proxy와 firewall
Computer->proxy->Internet
Computer<-firewall<-Internet

RPC(Remote Procedure Call)-원격 프로시저 호출
★클라이언트와 서버는 무조건 쪼개야 한다
Server Application------Client Application
작업 요청
Web은 RPC의 일부분
REST API Server



★Open API(Open Application Programming Interface==Software Development Kit)
=>누구나 사용할 수 있도록 API를 공개
-API는 도구와 데이터를 모두 의미
★OAuth2 인증
-구글\페이스북 로그인, 카카오\네이버로그인 등으로 모든 사이트 로그인
필요한 추가 정보만 조금 제출
=>이것도 Open API 일종


NIC(Network Interface Card)의 추상화 : Socket
소켓프로그래밍?

웹 서버<-웹 클라이언트 
요청

웹 서버->웹 클라이언트 
응답

웹은 응답이 끝나면 연결이 해제됨->이전 상태를 알 수 없다
때문에 소켓프로그래밍이 필요.
웹소켓:웹과 소켓의 결합
=>대화식으로 실행 or 빠른 응답을 요구할 때.



★★★
컨텐츠가 중요한게 아님. 회사가 원하는 기술과 현재 트렌드를 얼마나 따라가고 있는지를 보일 것

★클라우드 배포-Git은 필수

*/

'JAVA' 카테고리의 다른 글

221110 oracle join1  (0) 2022.11.10
221110 oracle 그룹함수  (0) 2022.11.10
221031 정규 표현식  (0) 2022.10.31
221031 Semaphore  (0) 2022.10.31
221031 생산자와 소비자 문제  (0) 2022.10.31