Nếu không có -q
cờ, ví dụ của netcat
bạn sẽ đợi mãi. Không có thông báo "kết thúc luồng" với UDP, vì vậy không có cách nào netcat
để biết rằng cả stdin và kết nối mạng đã kết thúc.
Ví dụ: sử dụng TCP / IP, công việc này như mong đợi:
nc -l localhost 4300 # Window 1
nc localhost 4300 </etc/group # Window 2
Nhưng như bạn đã xác định, sử dụng UDP / IP, điều này không bao giờ kết thúc:
nc -u -l localhost 4300 # Window 1
nc -u localhost 4300 </etc/group # Window 2
Đây là nơi -q
cờ đến. Nhưng thật không may, nó không chấp nhận giá trị của 0
. Nó cũng sẽ không chấp nhận các giá trị không nguyên. Đây là giải pháp thay thế tốt nhất tôi có thể cung cấp mà không cần nhờ đến timeout
hoặc một số tiện ích bên ngoài khác:
nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
Ngay cả ở đây, không thể có netcat
thời gian lắng nghe một cách duyên dáng. ( -w
Tùy chọn hết thời gian bị bỏ qua và -q
không liên quan.) Một cái gì đó như thế này có thể được sử dụng trong một tình huống thực tế, để nó netcat
bị giết sau 90 giây:
timeout 90 nc -u -l localhost 4300 # Window 1
nc -q 1 -u localhost 4300 </etc/group # Window 2
-q
.