반응형

C:\Windows\System32\drivers\etc에 있는 hosts파일에 저장되어 있는 local ip와 현재 ip가 달라서 발생하는 오류입니다.
저같은 경우는 hosts를 visual code로 열어서

ip주소를 맞춰주었더니 해결이 되었습니다.

(기존 ip 주소는 127.0.0.0으로 되어 있었음.. 127.0.0.1로 바꾸니 해결됬어요)

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

Client 클래스

package application;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

//한명의 클라이언트와 통신하게 해주는 클래스 입니다.
public class Client {
	
		//소켓이 있어야지 클라이언트와 네트워크상에서 통신할 수 있음.
		Socket socket;
		
		//생성자 생성
		public Client(Socket socket) {
			this.socket = socket;
			
			//반복적으로 클라이언트로부터 메시지를 전달받을 수 있도록 receive()함수를 만듬.
			receive();
		}
		
		//클라이언트로부터 메시지를 전달받는 메소드.
		public void receive() {
			//작업 생성은 Runnable 인터페이스 or Callable 인터페이스를 구현한 클래스로 작업요청할 코드를 삽입해 작업을 만들 수 있습니다.
			//둘의 차이점은 Runnable의 run() 메서드는 리턴값이 없고, Callable의 call() 메서드는 리턴 값이 있습니다.
			Runnable thread = new Runnable() {
				@Override
				public void run() {
					try {
						//반복적으로 클라이언드에게 내용을 받을 수 있도록  while문 생성
						while(true) {
							//어떤 내용을 전달 받을 수 있도록 inputstream객체 사용
							InputStream in = socket.getInputStream();
							//버퍼를 사용해서 한번에 512byte까지 받을 수 있도록 설정
							byte[] buffer = new byte[512];
							//메시지의 크기
							int length = in.read(buffer);
							while(length == -1) throw new IOException();
							//서버에 접속을 한 클라이언트의 주소정보 출력, 스레드의 이름값을 출력, 
							System.out.println("[메시지 수신 성공]"
									+ socket.getRemoteSocketAddress()
									+ ":" + Thread.currentThread().getName());
							//전달받은 값을 한글도 포함 할 수 있도록 UTF-8 설정
							String message = new String(buffer, 0, length, "UTF-8");
							//전달받은 메시지를 다른 클라이언트들에게 보낼 수 있도록 만들어 줍니다.
							for(Client client : Main.clients) {
								client.send(message);
							}
						}
						
					}catch(Exception e){
						try {
							System.out.println(" [메시지 수신 오류]"
							+ socket.getRemoteSocketAddress()
							+ " : " + Thread.currentThread().getName());
						}catch(Exception e2){
							e2.printStackTrace();
						}
					}
				}
				
			};
			//메인함수에 있는 스레드풀에 섭밋을 해줍니다.
			//즉 스레드풀에 만들어진 하나의 스레드를 등록
			Main.threadPool.submit(thread);
		}
		
		//클라이언트에게 메시지를 전송하는 메소드.
		public void send(String message) {
			Runnable thread = new Runnable() {

				@Override
				public void run() {
					try {
						OutputStream out = socket.getOutputStream();
						byte[] buffer = message.getBytes("UTF-8");
						//버퍼에 담긴 내용을 서버에서 클라이언트에게 전송
						out.write(buffer);
						out.flush();
					}catch(Exception e){
						try {
							System.out.println("[메시지 송수신 오류]" 
									+ socket.getRemoteSocketAddress()
									+ " :" + Thread.currentThread().getName());
								Main.clients.remove(Client.this);
								socket.close();
						}catch(Exception e2) {
							e2.printStackTrace();
						}
					}
					
				}
				
			};
			Main.threadPool.submit(thread);
		}
		
}

Main class

package application;
	
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Iterator;
import java.util.Vector;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import javafx.application.Application;
import javafx.stage.Stage;


public class Main extends Application {
	
	//스레드 풀 사용(한정된 자원으로 안정적이게 서버를 운용하기 위해서 threadPool 기법을 사용합니다.)
	public static ExecutorService threadPool;
	//접속한 클라이언트들을 관리 할수 있도록 만듬.
	public static Vector<Client> clients = new Vector<Client>();
	//서버 소켓 생성
	ServerSocket serverSocket;
	//서버를 구동시켜 클라이언트의 연결을 기다리는 메소드.
	public void startServer(String IP, int port) {
		try {
			serverSocket = new ServerSocket();
			//특정한 ip번호와 port번호로 특정한 클라이언트에게 접속을 기다리게 해줌
			serverSocket.bind(new InetSocketAddress(IP, port));
		}catch(Exception e) {
			e.printStackTrace();
			//서버 소켓이 닫혀있는 경우가 아니라면 
			if(!serverSocket.isClosed()) {
				stopServer();//서버를 종료
			}
			return;
		}
		// 클라이언트가 접속할 때 까지 계속 기다리는 스레드.
		Runnable thread = new Runnable() {

			@Override
			public void run() {
				//계속해서 새로운 클라이언트가 접속 할 수 있도록 해줌
				while(true) {
					try {
						Socket socket = serverSocket.accept();
						clients.add(new Client(socket));
						System.out.println(" [클라이언트 접속] "
								+ socket.getRemoteSocketAddress()
								+ " :" + Thread.currentThread().getName());
					}catch(Exception e) {
						//   서버 소켓에 문제가 생긴거니 서버를 종료 시키고 break문을 활용해서 빠져나갑니다.
						if(!serverSocket.isClosed()) {
							stopServer();
						}
						break;
					}
				}
			}
			
		};
		//스레드 풀을 초기화
		threadPool = Executors.newCachedThreadPool();
		//클라이언트에 접속을 원하는 스레드를 넣어줍니다. 
		threadPool.submit(thread);
	}
	//서버의 작동을 중지시켜주는 메소드
	public void stopServer() {
		try {
			//현재 작업중인 모든 소켓 닫기
			Iterator<Client> iterator = clients.iterator();
			//한명 한명의 클라이언트에게 접근
			while(iterator.hasNext()) {
				Client client = iterator.next();
				client.socket.close();
				iterator.remove();
			}
			//서버 소켓 객체 닫기
			if(serverSocket != null && !serverSocket.isClosed()) {
				serverSocket.close();
				
			}
			//스레드풀 종료
			if(threadPool != null && !threadPool.isShutdown()) {
				threadPool.shutdown();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	//UI를 생성하고 , 실질적으로 프로그램을 동작시키는 메서드
	@Override
	public void start(Stage primaryStage) {
	}
	
	//프로그램의 메인 메서드
	public static void main(String[] args) {
		launch(args);
	}
}

 

다음 글에서 계속 하겠습니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

 

1. 자신의 운영체제에 맞는 Java FX Scene Buler을 설치해 줍니다.

https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html

 

JavaFX Scene Builder 1.x Archive

No results found Your search did not match any results. We suggest you try the following to help find what you're looking for: Check the spelling of your keyword search. Use synonyms for the keyword you typed, for example, try “application” instead of “sof

www.oracle.com

2. eclipse의 help -> Market Place -> java fx 검색후 설치를 해줍니다.

 

3.  이제 프로젝트를 만들어 줍니다. 마우스 오른쪽 클릭해서 new-> other ->javafx검색->JavaFX Project생성

저는 Chat Server 이란 이름으로 만들어 주었습니다.

그 후에 application 패키지 내에 Client라는 Class를 생성해 주겠습니다.

Client 클래스

package application;

import java.net.Socket;

//한명의 클라이언트와 통신하게 해주는 클래스 입니다.
public class Client {
	
		//소켓이 있어야지 클라이언트와 네트워크상에서 통신할 수 있음.
		Socket socket;
		
		//생성자 생성
		public Client(Socket socket) {
			this.socket = socket;
			
			//반복적으로 클라이언트로부터 메시지를 전달받을 수 있도록 receive()함수를 만듬.
			receive();
		}
		
		//클라이언트로부터 메시지를 전달받는 메소드.
		public void receive() {
			
		}
		
		//클라이언트에게 메시지를 전송하는 메소드.
		public void send(String message) {
			
		}
		
}

 

다음으로 Main class로 가서 입력해 줍니다.

package application;
	
import java.net.ServerSocket;
import java.util.Vector;
import java.util.concurrent.ExecutorService;

import javafx.application.Application;
import javafx.stage.Stage;


public class Main extends Application {
	
	//스레드 풀 사용(한정된 자원으로 안정적이게 서버를 운용하기 위해서 threadPool 기법을 사용합니다.)
	public static ExecutorService threadPool;
	//접속한 클라이언트들을 관리 할수 있도록 만듬.
	public static Vector<Client> client = new Vector<Client>();
	//서버 소켓 생성
	ServerSocket serverSocekt;
	//서버를 구동시켜 클라이언트의 연결을 기다리는 메소드.
	public void startServer(String IP, int port) {
		
	}
	//서버의 작동을 중지시켜주는 메소드
	public void stopServer() {
		
	}
	
	//UI를 생성하고 , 실질적으로 프로그램을 동작시키는 메서드
	@Override
	public void start(Stage primaryStage) {
	}
	
	//프로그램의 메인 메서드
	public static void main(String[] args) {
		launch(args);
	}
}

 

기본적인 함수들을 만들어 주었습니다.

다음 글로 넘어가겠습니다.

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형
  • DI: Dependency injection의 약자 의존성 주입이라는 뜻.
  • 스프링을 적용하여 applicationContext.xml에서 설정만 해주면 외부 설정파일(xml)에서 연관관계에 있는 객체를 주입해주기 때문에 의존객체를 찾기 위한 코드가 필요하지 않게 됨. 즉 외부설정에서 객체를 찾아서 쓰기 때문에 코드 내에 의존관계를 맺는 코드 생성이 불필요.
  • AOP:Aspect oriented programming의 약자 관심지향 프로그래밍.
  • 프로그래밍을 할 때 특정한 관심사를 가진 코드 부분을 별도의 모듈로 분리함으로써, 기존 객체지향의 강력한 기능(상속, 위임)만으로는 처치가 곤란했던 중복을 제거 할 수 있게 됨.
  •  
반응형

'2020 > 신입 개발자 면접 질문 모음' 카테고리의 다른 글

신입개발자 면접 질문 DataBase(Oracle)  (0) 2020.03.16
iBatis 란  (0) 2020.03.15
면접 질문 spring  (0) 2020.03.12
Struts2  (0) 2020.03.12
ERP? Framework?  (0) 2020.03.11
블로그 이미지

꽃꽂이하는개발자

,
반응형
  • Spring : Java Enterprise Application 개발에 사용되는 Application Framework. 개발을 빠르고 효율적으로 할 수 있도록 Application의 바탕이 되는 틀과 공통프로그래밍 모델, 기술, API를 제공
  • 특징
    • 스프링은 종속객체주입이라는 기술을 통해 낮은 결합도를 유지할 수 있음.
    • AOP를 이용하여 객체지향만이 아닌 관심지향 기법을 활용.
    • EJB 기능을 대체 할 수 있음, 트랜젝션 처리를 위한 일관된 방법을 제공.
    • 레이어간 연결이 interface로 이루어지기 때문에 interface 생성이 필요.
    • 다양한 프레이워크와의 통합
  • MVC 모델에서 커버하는 부분: Controller 지원.
  • 실행 순서(실행구조):
    • web.xml의 등록된 DispatcherServlet를 통해서 요청에 대한 진입.
    • DispatcherServlet은 Client로부터 들어온 URL을 HandlerMapping 라는 곳으로 전송 후 URL을 분석해서 알맞은 Controller 이름을 다시 DispatcherServlet으로 보냄
    • HandlerMapping이라는 것을 통해서 실행될 Controller의 이름을 입력받은 DispatcherServlet은 전달받은 Controller를 실행시킴. 이렇게 실행된 Controller는 스프링에서 제공하는 ModelAndView 객체에 뷰 페이지에 전달할 객체와 View Page 이름 정보를 담고 DispatcherServet으로 보냄
    • ViewResolver를 통해서 보여 질 View페이지를 탐색한 후 View페이지를 보여줌
반응형

'2020 > 신입 개발자 면접 질문 모음' 카테고리의 다른 글

iBatis 란  (0) 2020.03.15
DI 와 AOP의 대해 설명하시오.  (0) 2020.03.12
Struts2  (0) 2020.03.12
ERP? Framework?  (0) 2020.03.11
URI와 URL의 차이  (0) 2019.12.09
블로그 이미지

꽃꽂이하는개발자

,
반응형
  • struts2 : MVC패턴을 지원하고, 웹 어플리케이션을 개발하기 위한 프레임워크
  • 특징:
    • 1. Struts1 + Webwork2의 아키텍처 적용
    • 2. POJO(Plain Old Java Object) 기반 액션 사용
    • 3. Zero configration(설정 없이) 지향
    • 4. Ajax기능을 태그와 테마 기반으로 구성.
    • 5. 다양한 표현식 언어 사용 가능(JSTL, OGNL).
  • MVC모델에서 커버하는 부분: Controller 지원
  • 실행순서(실행구조)
    • web.xml의 등록된 FilterDispatcher를 통해서 요청에 대해 진입.
    • FilterDispatcher에선 모든 요청을 처리하고, ActionPloxy 생성
    • ActionPloxy가 생성되면, FilterDispatcher가 실행 권한을 이임
    • Configuration은 struts.xml을 통해서 설정관리자를 초기화함.
    • 초기화 후, Action invocation 실행
    • 실행할 interceptor가 있으면 실행하고, Action으로 전달.
    • Action에서 결과 값을 통해, 해당 Template으로 이동.
    • interceptor자원 반납 후 응답.

 

반응형

'2020 > 신입 개발자 면접 질문 모음' 카테고리의 다른 글

DI 와 AOP의 대해 설명하시오.  (0) 2020.03.12
면접 질문 spring  (0) 2020.03.12
ERP? Framework?  (0) 2020.03.11
URI와 URL의 차이  (0) 2019.12.09
신입 개발자 면접질문 #3  (0) 2019.12.06
블로그 이미지

꽃꽂이하는개발자

,
반응형

1. ERP(Enterprise Resource planning)

  전산적 자원 관리 시스템으로 기업의 모든 자원을 전체적으로 관리하여 최적화된 기업 활동을 통합, 관리 시스템에 근거하여 스피드 경영과 투명 경영의 효과를 꾀하는 것이다.

 

2. Framework

  • 특정 형태의 소프트 웨어 문제를 해결하기 위해, 상호 협력하는 클래스들과 인터페이스의 집합
  • 장점 : 재사용성, 단순성, 역할구분, 확장성, 유지보수용이.
  • 프레임웍과 라이브러리 차이
  • 1. 라이브러리는 어플리케이션에서 호출할 수 있는 함수와 루틴으로 구성되어 있다.
  • 2. 프레임워크는 어플리케이션에서 특정 기능들을 제공하기 위해 확장할 수 있는 일반적이고 상호 협력적인 컴포넌트를 제공한다.
반응형

'2020 > 신입 개발자 면접 질문 모음' 카테고리의 다른 글

면접 질문 spring  (0) 2020.03.12
Struts2  (0) 2020.03.12
URI와 URL의 차이  (0) 2019.12.09
신입 개발자 면접질문 #3  (0) 2019.12.06
신입개발자 면접 질문 #2  (0) 2019.12.06
블로그 이미지

꽃꽂이하는개발자

,
반응형
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
      $(document).ready(function() {
        //자식 레벨에서만 찾아서 선택
        // $("ul")
        //   .children()
        //   .css({ color: "red", border: "2px solid red" });
        //노드의 부모를 선택
        // $("ul")
        //   .parent()
        //   .css({ color: "blue", border: "2px solid red" });
        // //노드의 모든 부모 선택
        // $("ul")
        //   .parents()
        //   .css({ color: "gray", border: "2px solid red" });
        // //태그의 형제 노드를 선택
        $("ul")
          .siblings()
          .css({ color: "green", border: "2px solid red" });
      });
    </script>
    <title>Document</title>
  </head>
  <body class="descendants">
    body(great-grndparent)
    <div style="width:500px;">
      div(grandparent)
      <ul>
        ul (direct parent)
        <li>
          li(child)
          <span>span (grandchild)</span>
        </li>
      </ul>
      <ul>
        <li>another ul-li</li>
      </ul>
    </div>
  </body>
</html>
반응형

'2020 > JQuery' 카테고리의 다른 글

JQuery not()  (0) 2020.03.06
JQuery 현재요소, 다음요소, next(), nextAll()  (0) 2020.03.06
jquery animation stop  (0) 2020.03.06
JQuery 엘리먼트 순서 알아내기  (0) 2020.03.05
JQuery height, width  (0) 2020.03.05
블로그 이미지

꽃꽂이하는개발자

,