[JAVA] URL, 서버, 클라이언트

2021. 5. 31. 00:02·Programming/JAVA

// URL

//utf-8 파일
package network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;

import java.net.URL;

public class URLRead {

	public static void main(String[] args) {
		
		try {
			URL url = new URL("https://www.naver.com/");
			
			BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); 
			
			String line ="";
			while((line = br.readLine()) != null) {
				System.out.println(line);
			}
			br.close();
			
		} catch (MalformedURLException e) { // 주소가 존재하지 않는 주소라면
			e.printStackTrace();
		} catch (IOException e) { //openStream 열 때 오류 생기는 경우라면
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

// 서버

package swing.chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerEx {

	public static void main(String[] args) {
		ServerSocket server = null; //서버
		Socket socket = null;		//소켓
		BufferedReader in = null; //입력용
		BufferedWriter out = null;//출력용		
		Scanner sc = new Scanner(System.in); //콘솔창으로부터 가져옴
		
		try {
			server = new ServerSocket(9999); //포트를 넣어서 서버 소켓만들기
			System.out.println("연결 대기 중....");  //서버가 띄어져있어도 구분할 수 없으므로
			
			socket = server.accept();
			System.out.println("연결 되었습니다.");
			
			in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //읽어올 준비 - socket으로부터 받아옴
			out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //쓸 준비
			
			while(true) { // bye가 나올때까지
				String inMsg = in.readLine();
				if(inMsg.equalsIgnoreCase("bye")) {  //equalsIgnoreCase : 대소문자 무시하고 철자 맞기만 하면 됨
					System.out.println("클라이언트가 나갔습니다.");
					break;
					
				}
				// 정상 메시지인 경우
				System.out.println("클라이언트 : " + inMsg);
				
				System.out.print("보내기 >>");
				String outMsg = sc.nextLine(); //공백이 있어도 쓸 수 있음 , next면 공백 있으면 난리남
				out.write(outMsg + "\n");
				out.flush(); // 정상적으로 날라감				
			}
		} catch (IOException e) { //포트가 열리지 않을 경우 (정상적인 포트가 아닐 경우)
			e.printStackTrace();
		} finally { // 만들어논 순서의 역순으로 닫아야 함
			try {
				sc.close();
				out.close();
				in.close();
				socket.close();
				server.close();
			} catch (IOException e) {  // colse하다가 오류 생길 경우
				e.printStackTrace();
			}			
		}		
	}
}

 

// 클라이언트

package swing.chat;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ClientEx {

	public static void main(String[] args) {
		// 클라이언트는 서버가 필요 없음
		Socket socket = null;		//소켓
		BufferedReader in = null; //입력용
		BufferedWriter out = null;//출력용		
		Scanner sc = new Scanner(System.in); //콘솔창으로부터 가져옴
		
		try {
			socket = new Socket("localhost", 9999);
			in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //읽어올 준비 - socket으로부터 받아옴
			out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //쓸 준비
			
			while(true) { // bye가 나올때까지
				
				System.out.print("보내기 >>");
				String outMsg = sc.nextLine(); //공백이 있어도 쓸 수 있음 , next면 공백 있으면 난리남
				
				if(outMsg.equalsIgnoreCase("bye")) {  //equalsIgnoreCase : 대소문자 무시하고 철자 맞기만 하면 됨
					out.write(outMsg + "\n");
					out.flush(); 
					break;
				} 
				// 정상 메시지인 경우
				out.write(outMsg + "\n");
				out.flush(); // 정상적으로 날라감	
				
				String inMsg = in.readLine();				
				System.out.println("서버 >> : " + inMsg);							
			}
		} catch (IOException e) { //포트가 열리지 않을 경우 (정상적인 포트가 아닐 경우)
			e.printStackTrace();
		} finally { // 만들어논 순서의 역순으로 닫아야 함
			try {
				sc.close();
				out.close();
				in.close();
				socket.close();
			} catch (IOException e) {  // colse하다가 오류 생길 경우
				e.printStackTrace();
			}
			
		}
		
		
	}
}

'Programming > JAVA' 카테고리의 다른 글

명품자바에센셜 2장 이론문제  (0) 2021.07.14
[Java] 스레드 종료  (0) 2021.07.07
[JAVA] DB메소드, 로그인 창  (0) 2021.05.30
[JAVA] Oracle 삽입, 삭제, 수정, 조회  (0) 2021.05.30
[JAVA] 이미지아이콘 크기 조절  (0) 2021.05.21
'Programming/JAVA' 카테고리의 다른 글
  • 명품자바에센셜 2장 이론문제
  • [Java] 스레드 종료
  • [JAVA] DB메소드, 로그인 창
  • [JAVA] Oracle 삽입, 삭제, 수정, 조회
min_sol
min_sol
  • min_sol
    비글개발연구소🐾
    min_sol
  • 전체
    오늘
    어제
    • 분류 전체보기 (278)
      • Programming (128)
        • Algorithm (52)
        • JAVA (40)
        • GIS (5)
        • PyQt (10)
        • C# (11)
        • Mobile (6)
        • AI (4)
      • Backend (36)
        • Spring (14)
        • JSP (11)
        • Network (5)
      • Frontend (29)
        • React (11)
        • Vue (13)
        • Next.js (4)
      • Database (10)
        • PostgreSQL (1)
        • Oracle (8)
        • Elasticsearch (1)
      • DevOps (8)
        • Linux (7)
        • Mac (1)
      • Tools (31)
        • IntelliJ (1)
        • GitHub (10)
        • RPA (20)
      • Security (9)
      • etc (21)
        • ERROR (5)
        • 세미나 | 교육 (10)
        • 자격증 (1)
        • 일상 (2)
        • 2021 (2)
  • 인기 글

  • 태그

    계산기
    VUE
    알고리즘
    백준
    spring
    PyQt
    jsp
    코딩테스트
    자동화
    생능출판
    자료구조
    vue.js
    RPA
    명품자바에센셜
    자바
    이클립스
    PyQt5
    Java
    스윙
    연습문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
min_sol
[JAVA] URL, 서버, 클라이언트
상단으로

티스토리툴바