명명 된 파이프를 사용하여 강력한 메시징 시스템을 생성하지 못한 후에 netcat을 사용하려고합니다. 내 수신 측이 새로운 리스너를 생성합니다, netcat을을 사용하여 포트에 수신 작은 스크립트하고 수신 된 메시지를 기반으로 스크립트를 실행합니다 : 그것은Netcat을 보내는 측에서 차단할 수 있습니까?
보다 더 복잡 아무것도 없을 것# jh_listen.sh
message=$(netcat -l 5555)
nohup jh_listen.sh >/dev/null 2>&1 &
cmd=${message%% *}
parms=${message#* }
nohup ${cmd} ${parms} >/dev/null 2>&1 &
송신 측에를
echo "<command> <parms>" | netcat host 5555
내 문제는 연결을 닫고있는 청취자와 새로운 청취자 시작 사이에 짧은 간격이 있다는 것입니다. 청취 과정에서 메시지를받지 못하면 netcat에서 echo가 끝나고 즉시 메시지를 잃을 가능성이 있습니다. 뭔가를받을 때까지 데이터를 보낼 때 netcat 블록을 가질 수 있습니까? 나는 -q와 -w를 시도했지만, 내가 원하는 것은하지 않는다. 메시지 송신자가 메시지가 소비 될 때까지 차단할 수없는 경우 메시지 전송률이 높고 여러 호스트로부터 손실 될 가능성이 높습니다.
추가
가 보낸 사람이 내가 netcat을의 목록을 찾을 수는 없지만
msgno=1
while [[ true ]]; do
rc=-1
retrycount=0
while [[ ${rc} -ne 0 ]]; do
echo "<command> <parms> ${msgno} ${retrycount}" | netcat host 5555"
rc=$?
echo "<command> <parms> ${msgno} ${retrycount}" >> local.log
((retrycount++))
done
((msgno++))
done
를 사용하여 위의 리스너에 대한 강력한 보낸 사람을 구현하기 위해 노력했습니다 차단하지를 해결하려면 정보 종료 코드는 연결이 가능할 경우에만 0으로 종료해야한다는 것을 나타냅니다. 작가의 마지막 부분에있는 local.log에서 볼 수있는 것은 내가 기대하는 것입니다. msgno는 각 전송 후에 증가하고 retrycount는 보낼 수없는 경우 가끔씩 증가합니다. 수신 측에서는 때때로 msgno 시퀀스에서 빈 메시지 및/또는 갭을 얻습니다. 나는 netcat이 아닌 다른 것을 설명하기가 어려울 때가 있는데, 때로는 stdin을 잃어 버리는 것처럼 보이고, 심지어 메시지를 보내지 않았다하더라도 0으로 끝나는 경우가있다. 대부분의 경우 잘 작동하는 것처럼 보이지만 충분하지 않습니다. 메시지가 통과 할 수 있도록 보장해야합니다.
내가 사용중인 Linux 배포판에는 socat가 없으므로 널리 지원되는 것을 원합니다. 여기서 지정한 명령이 소켓에서 계속 수신 대기합니까? 그것이 단발이고 나는 새로운 청취자를 알릴 필요가있을 것이고 netcat과 같은 배에있다. –
@JimHudd 이것은 귀하의 코멘트에 응답 할 수 있습니다 [여기] (http://stackoverflow.com/questions/9596594/why-is-fork-needed-by-socat-when-connecting-to-a-web-server?answertab= 투표). socat 맨 페이지에서 _TCP-LISTEN_을 체크 아웃해야합니다. – Mikolaj
@JimHudd,'socat'은 훨씬 더 고급이며'netcat'처럼 널리 지원됩니다.그냥 –