2009-08-16 4 views
1

리눅스 컴퓨터에서 원격 음악 플레이어 데몬 (MPD) 서버를 실행하고 있습니다. 나는 다른 리눅스 머신에서이 스트림을 듣는 클라이언트를 가지고있다.TCP 포트에서 서버를 모니터링하는 가장 좋은 방법입니다.

MPD 서버에서 스트림 일시 중지 또는 중지를 요청하면 TCP 포트에 연결된 모든 클라이언트의 연결이 끊어집니다. 따라서 서버가 다시 스트리밍을 시작하면 클라이언트를 수동으로 다시 연결해야합니다.

연결을 허용하는 서버의 TCP 포트를 모니터링하고 클라이언트를 자동으로 다시 시작하는 프로그램을 작성하고 싶습니다. 실행보다 더 잘 할 수 있습니까? connect()sleep()? 이 작업을 수행 할 수있는 명령 줄 유틸리티가 있습니까?

MPD 서버를 실행하는 컴퓨터에서 클라이언트를 실행할 수 있다면 도움이 될 것입니다. 다음은 프로세스가 로컬 포트에서 수신 대기하는지 알려주지 만 프로세스가 아닌 경우 차단하지 않으므로 루프로 다시 처리해야합니다.

$ sudo는 퓨저 -n TCP 8000
8000/TCP : 9677

$ sudo를 NETSTAT -nlp | 그렙 8000
TCP는 0 0.0.0.0:8000 0.0.0.0:* 0 9677가/MPD

나는 MPD 서버의 동작을 변경 포함하지 않는 솔루션을 시도 할 수 있습니다 LISTEN. 여기

답변

3

항상 MPD를 위임하는 릴레이 서버를 작성할 수 있습니다.

고객을 위해 다른 포트에서 수신 대기하고 대신 MPD에 연결합니다. MPD 연결이 끊어지면 릴레이는 클라이언트 연결을 끊지 않고 몇 초마다 재 연결을 시도합니다.

2

당신은 갈 :

echo -n "" | nc -q 0 localhost 8000 && echo "made a connection" || echo "server was down" 

echo -n ""가 표준 입력에 즉시 EOF를두고; nc -q 0은 stdin에서 EOF를보고 즉시 반환됩니다. nc (netcat)는 포트 8000에서 localhost에 연결을 시도합니다. 성공적으로 연결되면 성공한 오류 코드를 반환하고 "연결을 만들었습니다"; 그렇지 않으면 연결이 거부되면 "서버가 다운되었습니다"라는 메시지가 표시됩니다.

당신은 자세한 출력 한 후 다른 터미널 실행 포트 8000에서 수신 netcat을의 인스턴스를 시작합니다

nc -lvvp 8000 

에, 그것을 밖으로 테스트하려면

. 다른 터미널에서 첫 번째 명령을 실행하십시오. 처음으로 실행하면 연결이되었다고 말합니다. 그런 다음 서버/수신기가 종료되므로 다음에 서버를 실행하면 서버가 다운되었다고 표시됩니다.

+0

다른 컴퓨터에서 실행할 수 있다는 점을 제외하면 퓨저 또는 netstat를 사용하는 것과 비슷하지 않습니까? – nagul

+0

예, 절대적으로 다른 컴퓨터에서 실행할 수 있습니다. 물론 로컬 호스트 대신 원격 호스트 이름을 넣으십시오. 서버가 localhost에서만 설정 될 수 있으므로 예를 들어 원격 연결을 거부하기 때문에 정확하게 netstat과 같지 않습니다. 그러나 귀하의 필요에 충분히 근접 할 것입니다. –

관련 문제