-qBayrak olmadan örneğiniz netcatsonsuza kadar bekleyecektir. UDP ile "akış sonu" mesajı yoktur, bu nedenle netcathem stdin hem de ağ bağlantısının bittiğini bilmenin bir yolu yoktur .
Örneğin, TCP / IP kullanarak bu beklendiği gibi çalışır:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
Ancak belirlediğiniz gibi, UDP / IP kullanarak bu asla bitmez:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
-qBayrak burada devreye giriyor. Maalesef değeri kabul etmiyor 0. Tamsayı olmayan değerleri de kabul etmez. İşte size timeoutveya başka bir harici yardımcı programa başvurmadan sunabileceğim en iyi alternatif :
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
Burada bile, dinleme netcatzamanının zarif bir şekilde bitmesi mümkün değildir . (Zaman -waşımı seçeneği yok sayılır ve -qönemsizdir.) Bunun gibi bir şey pratik bir durumda kullanılabilir, böylece netcat90 saniye sonra öldürülür:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q.