kdk1026
954
2017-10-12 12:14:03
2
1086

Socket 통신 3박자 처리 어떻게 해야 하나요?


1. 서버에 요청

2. 서버로부터 응답 받음

3. 서버에 요청 (확인)


일반적으로 1~2번까지만 처리하는 방식으로 처리하면 타임 아웃 오류납니다...

응답 받으면 Two Socket 처리 해볼려 했는데...오류 나니 제외...


2번 이후,

요청 처리하게끔 처리하면 응답은 정상으로 받습니다.

응답만 받을 뿐 바로 거래 취소됩니다...


다만 20초 정도 시간이 걸리네요....

서버 로그 확인해보면 중간에 다음과 같은 문구가 있습니다. (서버 = C)


msg:Transport endpoint is already connected, errno:133, timeout_val:20


구조 정리가 대략 다음과 같습니다.

try {

  소켓 커넥션

  

  아웃풋 스트림으로 요청

  인풋 스트림으로 받음

  아웃풋 스트림으로 요청

} finally {

  인풋 스트림, 아웃풋 스트림, 소켓 클로즈

}


보내는 경우, 클로즈 전에는 flsuh 해주고 있구요...

0
  • 답변 2

  • 아항항하잏이
    77
    2017-10-12 13:25:51

    요청 ㅡ 응답

    요청 ㅡ 응답

    두번째 응답까지 정상적으로 받은거면

    서버쪽과 통신은 정상인게 아닌가요?

    거래취소가 된다는건 두번째 응답받고

    내부처리할때 로직오류를 말씀하시는건가요


    1,2번만 하고 타임아웃에러가 나는것은

    소켓은 끊지않아서 서버쪽 타임아웃시간에

    잡히는건 아닌지.. 글로만 봐서 명확히 상황파악이

    안되네용

  • kdk1026
    954
    2017-10-12 16:05:31

    흠...

    로직 오류인지 서버단은 모르겠네요...


    아무튼 해당 업무에 한해서만

    요청 - 응답 - 확인 과정을 거쳐야 합니다... (즉, 보내고 - 받고 - 보내고)


    요청 - 응답만 하는 클래스로 처리 시에는 응답 받으면 소켓을 끊구요...

    아마 서버단에서는 응답 보냈으면 확인 받는 것을 대기 중인데,

    클라이언트가 끊어서 그런건가 하고 넘겨서 모르겠네요....


    클라이언트 입장에서는 저렇게 처리하는 것이 맞을까요?

    요청 - 응답 같은 일반적인 케이스만 하다가 저런 케이스는 처음이라서요....


    OutputStream 처리(flush) -> InputStream 처리 -> OutputStream 처리(flush) -> IS , OS, Socket 닫기


    Transport endpoint is already connected

    이 메시지가 뭔가 있기는 한 것 같은데....


    일반적인 방식으로 처리하되 스트림 및 소켓을 닫지 않고,

    새로운 소켓으로 보내고 이전 소켓을 닫아야 할려나....


    확인은 응답이 또 없는 걸로 알고 있거든요...

  • 로그인을 하시면 답변 을 등록할 수 있습니다.