2012-01-11 3 views
0

저는이 커뮤니티에서 많은 도움을 받아 첫 번째 클라이언트/서버 앱을 구성하려고합니다.개발할 때 연결이 너무 많습니다.

저는 Indy 10과 Delphi Xe2를 사용하고 있지만, 제 문제는 그 문제와 관련이 없으며, 대신 소켓이 작동하는 방법 (당신이 저에게 묻는다면, 마법사와 흑인 예술)에 있다고 생각합니다.

나는 종종 예외의 중단 점을 누르고 Alt + F2를 눌러 중지하기 전에 코드를 단계별로 실행하기 때문에 다음에 실행되는 예외가 "이미 연결되었습니다"라는 예외가 발생하고 "너무 많은 연결"이 발생합니다.

어떻게 정리할 수 있습니까?

+1

사람들이 당신을 더 잘 도울 수 있도록 문제를 재현하는 최소한의 코드를 제공해주십시오. – menjaraz

답변

5

"이미 연결"(또한, 마지막으로 인디 데모처럼? ... 시도에 비해 ratehr 제외 ... 사람이하려고 사용하는 데모를 가지고있다) 당신이 전화를 클라이언트 측에서 발생 Connect() 인 반면 Connected()은 계속 true를 반환합니다. 이는 대개 읽지 않은 데이터를 연결 해제하고 읽지 않은 데이터를 IOHandler.InputBuffer에 남겨두면 발생합니다. 다시 연결하기 전에 InputBuffer을 지우십시오. 이것은 일반적으로 발생하기 때문에 Indy에 대한 가까운 장래의 업데이트로이 문제를 해결할 수 있습니다.

"연결이 너무 많음"은 서버의 MaxConnections 속성을 0이 아닌 양수 값으로 설정하고 새 클라이언트가 연결을 시도 할 때 많은 동시 클라이언트가 이미 서버에 연결되어 있음을 의미합니다. 많은 동시 연결을하고 있다고 생각하지 않는다면 일반적으로 서버 코드에서 연결을 올바르게 관리하지 못하기 때문에 연결이 끊어진 클라이언트가 올바르게 정리됩니다. 가장 일반적인 원인은 인디의 내부 예외를 포착하고 삼키는 예외 처리기를 코드에 넣는 것입니다. 예외를 catch하는 경우 EIdException에서 파생 된 예외를 다시 발생시키고 서버가 내부적으로 처리하도록하십시오.

+1

+1 다시 한 번 감사드립니다. Remy !! greta 팁을 사용하여 입력 버퍼를 지 웁니다. 예, 나는 최대 값을 0이 아닌 값으로 설정했습니다. 디버그를 중단하고 디버그 세션을 종료 한 후 중단 점이나 익스 프레 션에 도달했을 때 아마도 열어 두었을 것입니다. – Mawg

관련 문제