곰곰히생각해곰
173
2019-05-20 17:46:06
7
13351

자바 서버관련 Connection reset 문제


java.net.SocketException: Connection reset 

클라이언트에서 오브젝트아웃풋 스트림으로 보내서 서버측에서 데이터를 받는 식으로 코드가 구성되어 있는데요 처음 보낼때는 잘되다가 갑자기 에러가 발생해서 질문드립니다.


찾아보니까 

read 시 상대방 socket close 된 경우 

이런 설명이 있더라고요 그래서 연동된 클라이언트 쪽 소켓을 봤는데 이쪽에서는 소켓 종료를 사용하지 않아서 끊길일이 없거든요. 서버측에서 데이터를 받아오는 라인쪽에서 문제가 발생했다고 써있는데..

그쪽 라인에 들어오는 객체의 값을 출력해보니까 배열에 3개의 요소가 다 잘들어가서 출력이 되더라고요. 혹시 이 문제에 대해서 알려주실분 계신가요?

0
  • 답변 7

  • 즈루시
    2019-05-20 18:34:47

    커넥션 풀을 별도로 사용하시는게 아니라면 JDBC 관련 자원들은 해제 처리(like close)를 꼭 하셔야 합니다

    그 외 특이사항으로는 커넥션풀이 열려 있는 상태에서 장시간 유후 상태로 방치시 해당 이벤트가 발생하기도 했었습니다.

    각 환경에 따라 조금씩 상황이 다릅니다. 잘 디버깅해보세요 :)

  • 곰곰히생각해곰
    173
    2019-05-21 09:36:38
    즈루시 jdbc를 사용하진 않고 있고 데이터 수집용으로 클라이언트에서 데이터를 수집하여 서버 쪽으로 전송하는 용도로 사용하고 있는데요. 단순 통신입니당.. 그래서 서버나 클라이언트에서 소켓을 닫을 일도 없고 어긋나는 일도 없는데 난감하네요.. 디버깅하라는 말씀은 서버 클라이언트 양쪽에 다 디버깅하라는 말씀이신가요?
  • 즈루시
    2019-05-22 00:22:35

    Connection 이라고만 봐서 JDBC 인줄 알았네요 ㅎㅎㅎ


    통신 프로토콜을 어떤식으로 하시는지요? 매번 정확하게 열고  닫아야하는게 아니라면 UDP 로 구현하시는것도 나쁘지 않습니다. 가끔 EOF 가 제대로 떨어지지 않아서 그렇기도 하구요

    타임아웃 시간 내에 통신이 없어서 스스로 닫는 경우도 있구요 상황은 그때그때 다르니 여러케이스를 유추해보셔야 합니다

  • 곰곰히생각해곰
    173
    2019-05-22 08:51:40

    즈루시 그냥 단순한 자바 서버/클라이언트 소켓 통신입니다. 실시간으로 데이터를 수집해서 받아야 하기 때문에 소켓을 닫지 않고 계속적으로 연결한 상태로 굴러갑니다! 지금은 끊길때마다 소켓을 재 연결하게 해놓았는데 클라리언트 쪽 타임아웃을 한번 걸어봤는데 서버 측에서 데이터를 받은 다음 바로 커넥션 리셋이 뜨는 상황이라 방화벽 문제인가 싶어서 인바인드 다시 해보고 했는데 결과는 똑같네요 ㅎㅎ

  • 이나니
    17
    2019-10-11 09:47:56

    안녕하세요~

    혹시 해당 원인 해결 하셨나요?

    제거 서버쪽인데  클라이언트쪽에서 몇 년간 잘되다가 최근에 끊긴다고 연락이 와서

    같이 찾아보고 있습니다~

  • CTRL+W
    281
    2020-01-25 21:04:18

    혹시 너무 오랫동안 데이터 송신 또는 수신을 하지 않아 발생한 오류 아닐까요?

    이유는 모르겠는데, 옛날에 소켓통신 샘플 만들어보면 한참 이후에 데이터를 보내면 Connection Reset이라는 IOException이 발생합니다.

    그래서, 5초마다 의미없는 데이터를 보내는 쓰레드작업을 추가했더니 해결이 되었던 적이 있었습니다.


  • 이나니
    17
    2020-06-12 10:47:36

    답변을  쓰고 몇일 뒤에 원인을 찾았네요

    제 경우 DDOS 장비에서 차단하고 있었습니다

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