java

[자바] nio 를 이용한 소켓 클라부분 (GUI 연동)

sieunju 2017. 4. 27. 21:12
반응형


시험도 끝났겠다 다시 자바 서버에 대해서 포스팅을 해보도록 하겠습니다. :D


우선 클라 화면부터 보시겠습니다.




서버에서도 말해드렸듯이 기능은


1. 자기자신에게만 서버에게 보내고 받는 기능

2. 자신이 원하는 상대에게 보낼수 있는 기능

3. 서버에 접속한 모든 클라한테 보낼수 있는 기능.

4. 연결 해제


그외 다른 기능이 필요하다 싶으면, 댓글로 남겨주시길 바랍니다.

쓰디쓴 피드백 감사하겠습니다.


그럼 소스를 보도록 하겠습니다.




애초에 클라이언트는 서버에 접속하기만 하면 되기때문에 그렇게 많이 여러가지 것들을 배제한 상태입니다.


그럼 소스 해석을 해보도록 하겠습니다.


1. initilize () 일명 초기화 메소드

이건 그냥 GUI를 사용하는 것이기 때문에 패스 하도록 하겠습니다.

그외 버튼 이벤트도 패스 하도록 하겠습니다.

2. Connect() 메소드 ☆☆☆☆★



이 메소드를 한마디로 표현하자면 서버와의 연결을 시작하는 것으로 연결할 SocketChannel 을 Open 하고,

논블로킹 상태로 만듭니다.


3. Send()메소드 ☆☆☆☆★




이 메소드를 한마디로 표현하면 서버에게 보내는 메소드를 뜻합니다. write 메소드를 이용하여 보내고자하는

"패킷" 을 바이너리 형식 즉, Buffer 형식으로 변환해서 보내는 것이 되겠습니다.


4. run() 쓰레드 시작지점 ☆☆★★★





이부분은 쓰레드가 계속해서 실행이 되면서 서버에게 받을 데이터를 읽는 즉, 계속해서 클라는 "대기" 상태 입니다. 저는 이 run 부분을 없애고 클라가 서버에게 데이터를 전송할때에만 가능하도록 구현해보고싶었지만, 제 능력밖인거 같습니다. 아마 비동기 자바 소켓은 가능할것으로 보입니다.


아무튼 소스를 해석하자면  셀렉터를 생성하고 서버에게 데이터가 왔을시 Iterator 를 통하여 그 데이터를

_RecvBuf 라는 ByteBuffer 에 데이터를 삽입하고 그것을 RecvEvt 라는 메소드를 통해 이벤트를 처리하는 부분이 되겠습니다.


5. RecvEvt 메소드 ☆☆★★★




이메소드 같은 경우에는 서버로부터 받은 "패킷"을 자신이 원하는 값으로 변환해주는 메소드가 되겠습니다.


_RecvBuf 의 postion 값을 0 으로 해야 하기 때문에 "flip" 메소드를 사용했습니다. 그후

저같은 경우에는 패킷을 주고받을때


Type 

(2byte) 

 Data(.....)

 

 

 

 

 

 

 


이런형식이기 때문에 처음에 2byte 를 Type값입니다.

그 Type값에 따라 스위치(Switch)문에 이벤트를 실행하도록 설정했습니다.

#그후에는 Data 값입니다.


*스위치문(Switch) 문을 통하여 이벤트를 다 끝마치면 _RecvBuf 는 초기화(clear())를 해줘야 합니다. *


그렇지 않으면, 현재 클라는 계속해서 대기 상태이기 때문에 이전에 받은 데이터 값이 계속해서 진행되고 원치 않는 값들이 나오는 에러를 보실수 있습니다.



나머지 부분은 서버 클라에서 그렇게 중요한 부분이 아니기 때문에 이상 포스팅을 마치도록 하겠습니다.


감사합니다.


제가 만든 소스이니 마음껏 사용하셔도 되지만, 소스 맨위에 이름은 변경하지 말아주셨으면 합니다.


기타 궁금하신 내용이 있으시면 댓글로 남겨주시길 바랍니다 :D








반응형