태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



이 게시물을 무단으로 사용하는 행위(비영리, 영리 포함)는 CCL 2.0 저작자 표시-비영리-변경금지 라이센스에 의거하여 금지되어 있습니다. 원본 글의 출처 및 저작자를 표시해 주신다면 글의 스크랩은 자유롭게 하실 수 있습니다. 단, 비영리 목적의 발표(스터디 등)에 위 글을 사용하고 싶으신 분은 제게 미리 메일로 문의 부탁드립니다.

저작권과 관련된 자세한 사항은 이곳을 참조해 주시기 바랍니다.


자바에서 소켓 통신을 할 때 메시지 수신 측에서는 InputStream을 열고,

 송신측에서는 OutputStream을 열어 데이터를 통신의 통로로 사용합니다.


여기에서 InputStream이나 OutputStream을 열 때 주의해야 할 점이 있습니다.

바로 "양 측에서 각각 Stream을 열어야 한다"는 것입니다.


무슨 말인가 하면... 위에서 '수신측에서는 InputStream'을, 'OutputStream을' 연다고 언급했습니다. 

데이터 수신측에서  InputStream을 열었다면 송신측에서는 OutputStream을 연다는 얘기죠. 

즉 '상호간 Stream이 모두 열려야'합니다.


만약 Stream을 열 때, 한 쪽에서 하나의 스트림만(InputStream이나 OutputStream 중 하나만) 열게 되면 어떻게 될까요?

이미 소켓 통신을 사용해보신 대다수의 분들은 경험해 보셨을지 모르겠지만, InputStream이나 OutputStream을 여는 부분에서 더 이상 진행하지 못하고 무한 대기 상태에 빠지게 됩니다.

(getInputStream() 혹은 getOutputStream() 에서 더 이상 진행되지 못함)


Socket통신에서는 어느 한 쪽에서 InputStream을 열었다면

 다른 한 쪽에서 그 소켓의 OutputSteam을 열어 

'데이터를 주고받을 수 있는 통로'가 만들어질 때까지 기다리게 됩니다. 


이러한 특성 때문에, 만약 상호간에 데이터를 주고받으려면(즉, InputStream과 OutputStream을 모두 사용해야 할 경우) 

각 측에서 InputStream과 OutputStream을 교차로 열도록 구현해야 정상적으로 Stream을 열 수 있습니다. 

이를 그림으로 표현하면 다음과 같이 표현할 수 있습니다.




저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License


안드로이드 정보, 강좌를 누구보다 빨리 접하고 싶으신가요?

그렇다면 이메일 구독 혹은  구글 리더에 피드 추가 를 통해 업데이트되는 최신 글들을 받아보실 수 있습니다. :)




TRACKBACK http://androidhuman.tistory.com/trackback/508 관련글 쓰기

댓글을 달아 주세요