JAVA 기초

JAVA 23-1

Vanillwa 2023. 9. 12. 21:14

 

Network
사용자들이 옆에있는 장비로 데이터를 주고받는 작업을 네트워킹이라 한다.

자바에선 ip주소를 다루기 위한 클래스로 InetAddress를 제공

URL (uniform resource location)
인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소

 


 

http 통신과 Socket 통신

http - 단방향 통신 / Client의 Request가 있을 때 마다 
Server가 Response하여 해당 정보를 전송하고 바로 연결을 종료

Socket - 양방향 통신 / Server와 Client가 특정 Port로 연결되어 실시간으로 양뱡향 통신이 가능
실시간 방송, 채팅, 게임과 같이 즉각적으로 정보를 주고받는 경우에 사용

Socket 통신의 규칙
1. 먼저 기다리는 측을 Server라고 하며, Server는 Port를 열고 Client의 접속을 기4다린다.
2. 접속하는 측을 Client라고 하며, Server의 IP와 Port에 접속하여 통신이 연결된다.
3. Server와 Client간의 통신은 Send, Receive의 형태로 주고받는다.
4. 통신이 끝나면 close()로 접속을 끊는다.

 


 

Socket 통신

 

Server

package ex2_socket;

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

public class MyServer extends Thread {
	ServerSocket ss;

	public MyServer() {
		try {
			// 서버소켓 생성시 서비스 포트번호를 지정
			// 클라이언트가 접속할 때 필요한 번호이다
			// 서비스 포트번호의 범위는 3000번 이후의 번호를 사용하는것이 좋다
			ss = new ServerSocket(3000);
			System.out.println("서버 완료!");
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

	@Override
	public void run() {
		while (true) {
			try {
				Socket s = ss.accept();

				String ip = s.getInetAddress().getHostAddress();

				BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));

				String msg = reader.readLine();

				System.out.println(ip + " : " + msg);
			} catch (Exception e) {
			}
		}
	}

	public static void main(String[] args) {
		MyServer ms = new MyServer();
		ms.start();
	}
}

 

 

Client

package ex2_socket;

import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MyClient {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		System.out.print("입력 : ");
		String msg = sc.nextLine();

		if (msg != null && msg.trim().length() > 0) {
			Socket s = null;
			try {
				s = new Socket("ip 주소 입력", 3000); // 서버 접속

				// 문자열을 서버로 보내기 위해 스트림 준비
				PrintWriter out = new PrintWriter(s.getOutputStream());

				out.write(msg);

				out.flush(); // 스트림에 담은 내용을 비워라

				if (out != null)
					out.close();
			} catch (Exception e) {
				// TODO: handle exception
			} finally {
				try {
					if (s != null) {
						s.close();
					}
				} catch (Exception e2) {
					// TODO: handle exception
				}
			}
		}
	}
}

 

실행결과

클라이언트 측에서 문자열을 입력하면
서버측에서 "ip 주소 : 문자열"로 출력이 된다

 


 

'JAVA 기초' 카테고리의 다른 글

JAVA 24  (0) 2023.09.13
JAVA 23-2  (0) 2023.09.12
JAVA 22-2  (0) 2023.09.12
JAVA 22-1  (0) 2023.09.12
JAVA 21-2  (0) 2023.09.08