Q&A

  • Socket 통신시 Client Error 처리...
각각의 PC에 Server 와 Client 콤포넌트로 Socket통신을 테스트 중입니다.
제가 테스트 한것은 일정시간 Client 가 Server로 접속을 실패하였을 경우 입니다.
처음에 Connect이 된 상태에서 접속이 끊어지면 DisConnect 이벤트가 발생했다가
일정시간 접속이 성공하지 않으면 Error 이벤트가 발생하는데 이때 처음에 발생하는 Error Code
가 10038인가 Error입니다. 이때 Server 를 작동 시키면 바로 Connect가 됐다가 Connect가 Error
이벤트가 몇번 번갈아 가며 동작하다가 Error 이벤트에서 Error Code = 10060 이 발생하면서
프로그램을 아예 종료 했다가 재작동 시키기 전에는 더이상 접속이 되질 않습니다.
물론 Error Code := 0 Socket.Close 처리는 Error 이벤트에 처리해 놓았구요.
이렇게 되었을때는 강제로 Client.Active를 False 로 하여 놓고 타이머에서 매초마다
Client.Active가 False일때 접속을 시도하도록 하여 놓아도 소용이 없습니다.
또 Server 쪽에는 Connect이 되어있는 상태로 유지 되어 있구요.
어떻게 하면 프로그램을 종료 하지 않고 안정적으로 접속을 끊었다가 다시 연결을 할수 있을까요?
조언좀 부탁드립니다.
1  COMMENTS
  • Profile
    도깨비 2005.03.23 21:31


    socket open 후 바로 처리로직을 넣으시면 안되고, onConnected 이벤트 발생시 실제 connect된 것이므로 이때 로직을 넣어야 하고요,
    마찬가지로 socket close 할때도 onDisconnect 이벤트때 실제 disconnect된 것이므로 해당 로직을 넣으시면 되겠죠.
    sockect 관련한 error dialog는 보다 시스템 레벨에서 나오는 것이니, try...except로는 해결 안되므로 님께서 하신대로 onError 이벤트 핸들러에 error code :=0 넣으시면 되고요.

    아무튼, timer 거실때 socket close 확인은 onDisconnect로 하셔야 별 무리 없습니다.
    • 라벤더
      2005.03.10 00:30
      FileRead(FH, PChar(nfile), len); 이런식으로 쓰면 되지 않나요.. 무엇이 문제이신지;;
    • 세일러문
      2005.03.10 00:42
    • 오석영
    • 2005.03.09 10:15
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2005.03.09 23:41
      코드를 정리해서 올려주셔서 어떤식으로 쓰시는지는 잘 모르겠습니다만은 요런 경우 시간이 걸리는 부...
    • 손희석
      2005.03.09 22:04
      배열보다는 TList형을 이용하는 것이 나을지도요.. 메모리 누수가 걱정되시면 TObjectList를 이용하시면...
    • 난 백만당적이다.
      2005.03.09 19:54
      for문을 이용해서 n만큼 반복해서 하면 되지 않나요? <!--CodeS--> for i := 0 to n do be...
    • 홍성락
      2005.03.09 05:41
      그냥 쉽게 전역변수써서 마우스다운/업에 코딩 하시면 안되나요, 아래 perform으로 윈도우메세지 써야하나...
    • nilriri™
      2005.03.09 02:05
      .
    • 이창재
    • 2005.03.09 01:18
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박지용
      2005.03.09 01:22
      Delete 나 Update를 할 때 즉, 결과 recordset을 받지 않는 경우는 ExecSQL(); 로 쿼리를 실행해야 합니다...
    • 이창재
      2005.03.09 01:25
    • 박준하
    • 2005.03.09 01:15
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 모영철
      2005.03.08 23:00
      배열은 지역이냐 전역이냐에 따라 생성 소멸되기 땜에 프로그램이 종료 되면 메모리 해제 될테구요.. ...
    • 최성효
    • 2005.03.08 20:48
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 박지용
      2005.03.09 01:25
      BDE를 이용하지 말고, ADODB 컴포넌트를 사용하면 더좋은 결과를 얻을꺼에요^^
    • 최성효
      2005.03.09 03:17
      답변 감사합니다. 그런데 MSSQL 2000 이랑 delphi 7.0 이랑 연결하는 자료는 쉽사리 찾아지지가 않네요~...
    • 박지용
      2005.03.09 23:27
      여기 자료실이나, 강좌에서 ADO관련자료를 찾아보시거나, 델파이 관련 책을 구매하시면 ADO관련내용은 ...
    • 장재영
    • 2005.03.08 17:26
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 난 백만당적이다.
      2005.03.08 18:11
      년도가 뒤로간 날짜 타입이 존재하잖아요... 12-31-2005   머 이런식으로.... ...
    • 장재영
      2005.03.16 16:55
      config.db 에 command=set DATE ANSI 위 환경 때문에   2005-12-31 이런 형식으로 자동 변...
    • 이영주
    • 2005.03.08 10:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 유효근
    • 2005.03.08 07:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.03.08 18:24
      레지스트리 항목이 뜻하는 건 알수 없지만.. 추측컨데 익스플로러 종료시에 열어본 페이지 목록을 지우...
    • 권수광
    • 2005.03.08 06:53
    • 3 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2005.03.08 18:28
      세션 정보가 필요한 이유가 뭔지 여쭤봐도 될까요?
    • 권수광
      2005.03.09 06:40
      세션 정보가 필요한 이유는 그 웹에 로그인 한 사용자에 따라 메뉴 사용에 제한을 둘려고 합니다. 그러...
    • nilriri™
      2005.03.09 21:44
      제가 잘못이해하고 있는건가요? 세션이란건 서버측에 가지고 있는 데이터.. 쿠키는 클라이언트측에 ...
    • 이정택
    • 2005.03.08 05:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강재규
      2005.03.08 20:54
      저의 생각으로는 ClientWidth = 100% ClientHeight = 100% 으로 해보세요. win98나 win2000에서 작...
    • 이재근
    • 2005.03.08 00:39
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2005.03.08 19:26
      굳이 송신부 스레드가 존재할 이유가 있나요? 그냥 과감히 없애세요 그리고 수집부에 걍 송신하세요. 만...
    • 이재근
      2005.03.10 00:40
      안녕하세요. 우선 답변 감사드립니다. 제가 이해가 잘 안가서 다시 한번 질문을 드리겠습니다. 데이...
    • 이재근
      2005.03.14 21:13
      안녕하세요. 결국 Thread가 제대로 종료 되지 않아서 생긴 문제 였습니다. Thread Execute 하는 부분에...
    • 로도스
    • 2005.03.08 00:24
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 난 백만당적이다.
      2005.03.09 00:38
      이런 방법도 있습니다. <!--CodeS--> var    i : Integer;    ch...
    • 정정호
      2005.03.08 01:39
      function ReverseWideString(const AText: WideString): Widestring; var   I, Index: Integer...
    • nilriri™
      2005.03.08 00:59
      한글 또는 ByteType 로 검색해서 참고하세요..^^ <!--CodeS--> // 참고만 하세요...ㅡㅡ; ...
    • 성지현
    • 2005.03.08 00:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2005.03.08 01:00
      안녕하세요. 최용일입니다. 시작메뉴의 델파이아이콘에서 마우스 오른쪽 클릭해서 맨밑에 속성메뉴 클릭...
    • 성지현
      2005.03.08 19:05
      아이고 감솨함당~~
    • 고진중
    • 2005.03.07 21:45
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 무심코
      2005.03.07 21:50
      OnCloseQuery 이벤트에서 하시고요 CanClose 를 true/false 값을 주시면 됩니다.
    • 오병준
    • 2005.03.07 19:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 도깨비
      2005.03.23 21:31
      socket open 후 바로 처리로직을 넣으시면 안되고, onConnected 이벤트 발생시 실제 connect된 것이므...