저작권과 관련된 자세한 사항은 이곳을 참조해 주시기 바랍니다.
자바에서 소켓 통신을 할 때 메시지 수신 측에서는 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을 열 수 있습니다.
이를 그림으로 표현하면 다음과 같이 표현할 수 있습니다.
'프로그래밍 이야기 > 자바' 카테고리의 다른 글
| Jersey에서 원소가 한개인 JSONArray를 반환할 때 Array로 반환되지 않는 문제 해결 (0) | 2012/09/04 |
|---|---|
| Google App Engine + Jersey를 사용하여 REST 서비스 구축하기 (3) | 2012/08/13 |
| 소켓 통신에서 InputStream / OutputStream을 열 때 무한대기(멈추는 현상)은 왜 일어날까요? (0) | 2012/07/21 |
| Jersey 라이브러리로 REST서버를 만들어보자! (12) | 2011/07/21 |
| 티스토리에서 XML도 코드하이라이터(Syntax Highlighter)를 쓰고싶다!! (4) | 2009/11/09 |
| [안드로이드를 위한 자바] 오버로딩(Overloading), 오버라이딩(Overriding)의 이해 (10) | 2009/05/20 |
안드로이드 정보, 강좌를 누구보다 빨리 접하고 싶으신가요?
그렇다면 이메일 구독 혹은
를 통해 업데이트되는 최신 글들을 받아보실 수 있습니다. :)





댓글을 달아 주세요