무정지 서버 / 무정지 에코서버

준동이·2023년 4월 17일
0
post-custom-banner

무정지 서버 - 다시 대기하도록 만들기

while문 무한루프로 생성 후 안에 try catch문 넣고 그 안에 서버 대기상태 넣어주기.

꺼지지않는(항상 대기중인) Server

package pack3;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServerEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ServerSocket serverSocket = null;
		Socket socket = null;

		try {
			// 한 개의 포트는 한 개의 프로그램만 사용 가능 / 7777번의 서버소켓 생성
			serverSocket = new ServerSocket(7777);

			while (true) {
				try {
				// 포트 개방
				System.out.println("서버가 준비되었습니다.");

				// 대기
				socket = serverSocket.accept();
				System.out.println("클라이언트가 연결되었습니다.");
				} catch(IOException e) {
					System.out.println("[에러] +" + e.getMessage());
				} finally {
					if(socket != null) try {socket.close();} catch(IOException e){}
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if(socket != null) try {socket.close();} catch(IOException e) {}
			if(serverSocket != null) try {serverSocket.close();} catch(IOException e) {}
		}
	}

}

Client

package pack3;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClientEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Socket socket = null;
		
		try {
			System.out.println("서버와 연결을 시작합니다.");
			
			// 소켓은 접속이된다는 의미
			// 서로 다른 컴퓨터와의 교신.. 
			socket = new Socket("localhost", 7777);
			System.out.println("서버와 연결되었습니다.");
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if(socket != null) try {socket.close();} catch(IOException e) {}
		}
	}

}

클라이언트에서 실행을 여러번 해도 계속 연결이 된다.
컨트롤 + c 누르면 서버 종료



무정지 에코서버

package pack4;

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

public class TCPServerEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ServerSocket serverSocket = null;
		Socket socket = null;
		
		BufferedReader br = null;
		BufferedWriter bw = null;
		
		try {
			serverSocket = new ServerSocket(7777);
			
			
			// 무정지 만들기
			while(true) {
			System.out.println("서버가 준비되었습니다.");	
			socket = serverSocket.accept();
			
			br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
			
			String msg = br.readLine();
			System.out.println("메세지 : " + msg);
			
			bw.write(msg + System.lineSeparator());
			
			// 전송 완료
			bw.flush();
			System.out.println("전송이 완료되었습니다.");
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			// 반드시 소켓 위에서 닫아줘야한다.
			if(br != null) try {br.close();} catch(IOException e) {}
			if(bw != null) try {bw.close();} catch(IOException e) {}
			if(socket != null) try {socket.close();} catch(IOException e) {}
			if(serverSocket != null) try {serverSocket.close();} catch(IOException e) {}
		}
	}

}

Client

package pack4;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPClientEx01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Socket socket = null;
		
		BufferedWriter bw = null;
		BufferedReader br = null;
		try {
			System.out.println("서버와 연결을 시작합니다.");
			
			socket = new Socket("localhost", 7777);
			System.out.println("서버와 연결되었습니다.");
			
			bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
			br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
			
			
			bw.write("Hello Echo Server" + System.lineSeparator());
			bw.flush();
			
			System.out.println("전송이 완료되었습니다.");
			
			// 읽기
			String msg = br.readLine();
			System.out.println("에코 메세지 : " + msg);
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if(bw != null) try {bw.close();} catch(IOException e) {}
			if(br != null) try {br.close();} catch(IOException e) {}
			if(socket != null) try {socket.close();} catch(IOException e) {}
		}
	}

}

계속 준비돼있음.



UI로 구구단 만들어서 서버-클라이언트로 출력



마리아디비 추가하여 cmd에서 클래스 실행 시킬때

java -classpath ".;C:\java\eclipse\API\mariadb-java-client-2.7.6.jar" pack1.TCPServerEx01
profile
개발자 꿈나무
post-custom-banner

0개의 댓글