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 |