Saya mencoba mengirim pesan netcat
. Setelah mengirim pesan, netcat
harus diakhiri.
Saya sudah mencoba yang berikut ini:
cat tsmmessage.bin | nc -u localhost 4300
nc -u localhost 4300 < message.bin
The -q
pilihan negara:
-q detik
setelah EOF pada stdin, tunggu jumlah detik yang ditentukan dan kemudian berhenti. Jika detik negatif, tunggu selamanya.
Tapi
nc -q0 -u localhost 4300 < message.bin
juga tidak berfungsi.
Apa yang saya lewatkan?
-q
.invalid wait-time 0
Tanpa
-q
bendera instance Andanetcat
akan menunggu selamanya. Tidak ada pesan "end of stream" dengan UDP sehingga tidak ada cara untuknetcat
mengetahui bahwa stdin dan koneksi jaringan telah selesai.Misalnya, menggunakan TCP / IP ini berfungsi seperti yang diharapkan:
Tetapi seperti yang telah Anda tentukan, menggunakan UDP / IP ini tidak pernah berakhir:
Di sinilah
-q
bendera masuk. Tapi sayangnya itu tidak menerima nilai0
. Itu juga tidak akan menerima nilai-nilai non-integer. Berikut ini adalah alternatif terbaik yang dapat saya tawarkan tanpa bantuan ketimeout
atau beberapa utilitas eksternal lainnya:Bahkan di sini, tidak mungkin memiliki
netcat
waktu mendengarkan dengan anggun. (-w
Opsi batas waktu diabaikan, dan-q
tidak relevan.) Sesuatu seperti ini mungkin berguna dalam situasi praktis, sehingganetcat
terbunuh setelah 90 detik:sumber
-q 0
bekerja untukku.udp
tcp
sumber
Stumbled atas ini ketika Googling tentang masalah yang hampir sama. Ternyata masalahnya adalah bahwa netcat terbunuh oleh bash tepat setelah semua data tersedot, tanpa mendapatkan kesempatan untuk menerima respons.
Solusi saya untuk ini adalah menambahkan beberapa penundaan setelah memipakan data, seperti ini:
Dengan file ini dapat terlihat seperti:
sumber
netcat
masih tidak menutup saatsleep
selesai. Saya akan mengharapkan baris perintah pertama untuk kembali ke prompt setelah 1 detik, tetapi tidak.-q 1
? yaitu(echo INFO; sleep 1) | nc -q 1 redis.service.consul 6379
?-q
semuanya berfungsi, bahkan contoh di pertanyaan awal saya. Saya sudah pindah ke versi Ubuntu yang lebih baru sejak itu, mungkin itu yang menyebabkan perbedaan.