Java/Network (5) 썸네일형 리스트형 8편 : TCP 소켓통신을 통한 멀티플레이 기능 구현 - 클라이언트 구현 Client 구현 클라이언트는 기존의 MainGUI 객체를 기본으로 하여 구현하였다. 소켓 통신을 위해 필요한 메서드들을 추가해주었다. startClient() : 채널그룹 객체와 소켓채널 객체를 생성한다. 서버채널에 연결을 요청하고 클라이언트를 시작한다. stopClient() : 작업 과정에 예외가 발생했거나 모든 작업을 마쳤을 경우, 클라이언트를 종료한다. 채널그룹과 소켓채널을 닫는다. receive() : 서버채널로부터 데이터를 받는다. send(String data) : data를 서버채널로 보낸다. handleResult(List args) : receive()에 대한 버튼 별 콜백함수로 읽은 데이터를 기반으로 GUI를 변경하거나 유저에게 알림을 보낸다. startClient() public .. [Java] NIO 기반 네트워킹 : TCP 넌블로킹(non-blocking) 채널 시작하며 IO기반의 네트워킹에서 TCP 통신을 위해 Socket과 ServerSocket 객체를 제공한다면 NIO기반의 네트워킹에서는 SocketChannel과 ServerSocketChannel을 제공한다. 사용방식은 Socket, ServerSocket과 거의 유사하다. IO기반의 TCP 통신에서는 연결을 요청하거나 수락하는 accept/connect 메서드, 읽고 쓰기 위한 read/write 메서드를 실행하면 블로킹이 일어나게 된다. 그렇기 때문에 이러한 메서드를 사용할 시 UI나 다른 작업의 블로킹을 막기위해 새로운 스레드를 생성하여 작업을 수행한다. 우리는 이러한 방식을 블로킹 방식이라고 한다. 반면 NIO기반의 TCP 통신의 경우 블로킹 방식외에도 메서드 실행시 블로킹이 일어나지 않는 넌블로.. [Java] NIO 기반 입출력 : 파일 비동기 채널 비동기 처리란? 파일채널에서 다뤘던 read/write 메서드나 IO기반 입출력에서 다뤘던 읽기/쓰기 메서드들을 메서드가 호출되면 해당 메서드가 실행을 마칠때까지 코드가 블로킹된다. 블로킹된 동안에는 UI와 상호작용 하는 코드나 이벤트 처리를 못하게 된다. 이를 방지하기 위해 멀티 스레드 환경을 구축하여 별도의 스레드에서 입출력 작업을 진행하기도 한다. 하지만 이러한 방식은 스레드를 폭증하게 만들고, 불특정 다수의 대용량 파일들을 입출력할때는 비효율적이다. 이를 해결하기위해 코드를 실행한 후, 그 코드가 종료되지 않더라도 바로 다음 코드를 실행하는 방식의 처리가 있는데 이를 비동기 처리라고 한다. 자바에서는 NIO기반의 파일 비동기 채널(AsynchronousFileChannel)을 통해 비동기 처리를 .. [Java] NIO 기반 입출력 : 파일 채널 FileChannel Java는 NIO기반의 입출력 시스템에서 파일 읽기/쓰기를 위한 FileChannel을 제공한다. FileChannel은 기본적으로 동기화 처리가 되어 있어 멀티 스레드 환경에서 사용해도 안전하다. FileChannel의 생성과 종료 FileChannel은 자신의 정적 메소드인 open()으로 FileChannel 객체를 생성할 수 있다. 또한 FileInputStream/FileOutputStream의 getChannel 메서드를 통해서도 얻을 수 있다. FileChannel fileChannel = FileChannel.open(Path path, OpenOption option1, OpenOption option2, ...) open() 메서드는 매게인자로 파일의 경로 객체와 .. [Java] 네트워크(Networking) : TCP 통신 들어가기 앞서... 본 포스팅은 TCP 통신을 '자바로 어떻게 구현'하는지에 대한 이야기입니다. TCP 통신 자체에 대한 내용은 이후 [컴퓨터공학] 카테고리에 작성할 예정입니다 :) TCP 서버의 역할 TCP 서버의 역할은 두가지이다. 첫째는 클라이언트의 연결 요청을 수락하는 것이고, 둘째는 클라이언트와 통신하는 것이다. 이때 연결 요청을 수락하는 역할을 하는 것이 ServerSocket 객체이고, 통신을 하는 역할이 Socket 객체이다. 이때 Client의 socket 객체는 connect() 메서드를 통해 연결을 요청하고 ServerSocket은 accept() 메서드를 통해 연결을 수락한다. 또한 연결 요청시에는 반드시 서버의 ip주소와 포트번호가 있어야 한다. ServerSocket server.. 이전 1 다음