หากไม่มีการ-q
ตั้งค่าสถานะอินสแตนซ์ของคุณnetcat
จะรอตลอดไป ไม่มีข้อความ "สิ้นสุดการสตรีม" ด้วย UDP ดังนั้นจึงไม่มีทางnetcat
รู้ว่าทั้งstdinและการเชื่อมต่อเครือข่ายเสร็จสิ้นแล้ว
ตัวอย่างเช่นการใช้ TCP / IP สามารถทำงานได้ตามที่คาดไว้:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
แต่ตามที่คุณพิจารณาแล้วการใช้ UDP / IP จะไม่มีวันสิ้นสุด:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
นี่คือที่-q
ธงมาใน. 0
แต่โชคร้ายที่มันไม่ยอมรับค่าของ นอกจากนี้ยังจะไม่ยอมรับค่าที่ไม่ใช่จำนวนเต็ม นี่เป็นทางเลือกที่ดีที่สุดที่ฉันสามารถเสนอได้โดยไม่ต้องขอความช่วยเหลือtimeout
จากบุคคลภายนอก
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
แม้แต่ที่นี่มันเป็นไปไม่ได้ที่จะหยุดพักการฟังnetcat
อย่างสง่างาม ( -w
ตัวเลือกการหมดเวลาจะถูกละเว้นและ-q
ไม่เกี่ยวข้อง) บางสิ่งเช่นนี้อาจถูกนำไปใช้ในสถานการณ์จริงเพื่อที่netcat
จะถูกฆ่าหลังจาก 90 วินาที:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q
นี่คือคำตอบที่ถูกต้องและจะต้องได้รับการยอมรับอย่างใดอย่างหนึ่งมากกว่า