Language/Java

210407

원2 2021. 4. 7. 16:31
728x90
반응형
import java.io.DataInputStream;
import java.io.*;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.Vector;

class Phone extends Common {// Server Managerment System class
	static Vector<Phone> aList = new Vector<Phone>();		// 클라이언트 객체 목록
	Socket cSock;
	DataInputStream inStream;
	DataOutputStream OutStream;
	
	
	@Override
	public void run() {
		System.out.println("Run 클라이언트 쓰레드 실행 준비 완료."); ////////////////////////
	}


	public Phone (Socket cSock) {
		this.cSock = cSock;
		try {
			inStream =  new DataInputStream(cSock.getInputStream());
			OutStream =  new DataOutputStream(cSock.getOutputStream());
		} catch (IOException e){
			e.printStackTrace();
		}
		aList.add(this); // 현재 객체가 바로 만들어진다.
		System.out.println("\n현재 접속자 수 : " + aList.size()); // 객체의 갯수
	}
}

public class Server extends Common {  
	public static void main(String[] args) {// Entry Point
		System.out.println("Server Start...");
		Server aServer = new Server();
		aServer.execute();
	}
	@Override
	public void run() {
		Scanner aScanner = new Scanner(System.in);
		String sMessage;
		System.out.println("공지사항 기능이 활성화 되었습니다...");
		while (true) {
			System.out.println("\n공지사항 입력 : ");
			sMessage = aScanner.nextLine();
			System.out.printf("[공지사항]: [%s]", sMessage);
			if(sMessage.equals(STOPMESSAGE)) {
				break;
			}
		}
		System.out.println("\n종료를 위해 공지사항 기능이 비활성화 되었습니다...");
		aScanner.close(); // while은 안에서 도는거고 어느순간 브레이크를 걸어주고 비활성화가되면 
		// 스캐너를 닫아줘야한다.
	}
	private ServerSocket sSocket;

	public Server() {
	}

	public void execute() {
		createSocket();
		
		new Thread(this).start(); // Server class 의 run을 Thread로 실행 : Scanner 활성화
		// Runnable은 Common에 있다... 여기서 this 는 Runnable, Runnable이 Thread가 되어버림
		while (true) {
			System.out.println(getTime() + "연결요청을 기다립니다.");
			try {
				Socket socket = sSocket.accept();
				System.out.println(getTime() + socket.getInetAddress() 
											 +"로부터 연결요청이 들어왔습니다.");
				new Thread(new Phone(socket)).start(); // 폰캑체를 만들고 쓰레드를 만들어서 실행.run호출
			} catch (IOException e) {
				System.out.println("IO 문제 발생");
				break;
			}

			//break;
		}

		try {
			sSocket.close();
		} catch (IOException e) {
			System.out.println("IO 문제 발생");
		}
	}

	private void createSocket() {
		try {
			sSocket = new ServerSocket(SPORT); //()안에는 서버번호 Common에 있다.
		} catch (IllegalArgumentException e) {
			System.out.println("잘못된 포트 번호 사용");
			return;
		} catch (IOException e) { //SPORT가 사용중이면 발생하는 문장.
			System.out.println("프로세서에서 포트가 선점되었습니다."+ "["+SPORT+"]");
			System.out.println("IO 문제 발생, 서버를 종료합니다.");
			return;
		}
		System.out.println(getTime() + "서버가 준비되었습니다.");
	}

}
728x90
반응형

'Language > Java' 카테고리의 다른 글

swing  (0) 2021.04.19
메소드 확인하는 곳  (0) 2021.04.19
for - each 문  (0) 2021.04.12
Book Manager System Program 최종  (0) 2021.04.07
Book Manager System Program  (0) 2021.04.06
채팅의 쓰레드화 04번  (0) 2021.04.06