2017-11-16 12 views
1

Windows의 대상 클라이언트 컴퓨터에서 파일 작업을 수행하고 셸 명령을 실행하는 배포 시스템이 있습니다. 나는 서버에 상주하는 Windows 서비스에 연결하기 위해 사용자 지정 TCP 끝점을 사용합니다.연결이 너무 많으면 나가는 클라이언트 TCP 포트가 차단됩니다.

이제이 도구를 사용하여 한 시스템에서 해당 에이전트 (클라이언트)의 수많은 인스턴스를 작성하고 서버에서 모든 작업 세트에 대해 특정 작업 세트를 실행합니다. 문제는 클라이언트 컴퓨터의 모든 나가는 TCP 포트가 수백 개 이상의 에이전트를 시작한 후에 차단된다는 것입니다. 각 에이전트는 동적 포트를 사용하고 단일 서버 포트를 수신 대기합니다.

2000-3999 포트에서 2000 에이전트가 실행 중이며 모두 서버의 포트 5111을 수신 대기 중입니다. 내가 윈도우 이벤트 로그에 받고있어 오류 메시지는 다음과 같이 진행됩니다

TCP/IP가 선택한 로컬 엔드 포인트는 최근 같은 원격 엔드 포인트에 연결하는 데 사용 되었기 때문에 나가는 연결을 설정하지 못했습니다. 이 오류는 나가는 연결이 높은 속도로 열리고 닫히는 일 때 일반적으로 발생하며 사용 가능한 모든 로컬 포트가 으로 사용되고 TCP/IP가 나가는 연결에 대해 로컬 포트를 다시 사용하도록합니다. 데이터 손상의 위험을 최소화하기 위해 TCP/IP 표준은 지정된 로컬 끝점에서 지정된 원격 끝점까지의 연속적인 연결 사이에 최소 시간이 필요합니다.

이 경우이 기계는 TCP 포트를 더 이상 사용할 수 없습니다. 레지스트리에서 TCP 기본 동작 중 일부를 변경하려고했지만 아무 소용이 없었습니다. 여는 연결 사이의 간격은 1 - 5 초입니다.

최적의 지연을 관리하기위한 모든 해결 방법 및/또는 어떻게하면 테스트에 필요한 적극적인 네트워크 활동과 관계없이 Windows가 응용 프로그램을 신뢰하게 할 수 있습니까?

+0

ReuseAddress를 에이전트 소켓에 설정해 보셨습니까? –

+0

실제로 PID와 포트 번호가 다른 2000 개의 개별 에이전트입니다. 서버의 수신 대기 포트 만 에이전트간에 유사합니다. 마지막으로 나는 연결을 설정하는 사이에 더 높은 지연을 시도하고 모든 것을 등록 할 수 있었다. –

답변

0

사이에 적절한 간격을 두지 않고 연결을 열면 클라이언트의 모든 포트가 공격적인 행동으로 인해 차단됩니다. 마지막으로 나는 1000ms에서 3000ms까지 각각의 연결 사이의 지연을 증가시켜 모든 에이전트를 연결해야합니다. 나는 아직도 이것의 역 동성을 파악하고 있으며, 아마 프로세스보다는 병렬 스레드에서 에이전트를 여는 것이 더 나은 해결책이 될 것입니다. 동일한 이름을 가진 많은 수의 프로세스가 OS에 호소하지 않는 것처럼 보입니다.