nc (netcat) zawiesza się, czekając na więcej danych, w trybie UDP.


16

Próbuję wysłać mały ciąg do statystyki przez nc wewnątrz bloku odczytu:

while read line; do
    printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done

Niestety, gdy jest w trybie UDP, nc wydaje się chcieć czekać w nieskończoność, mimo że to określiłem -q 0, co według strony podręcznika spowoduje, że program wyjdzie natychmiast po EOF.

Próbowałem przekazać -w 1, ale jeśli dane, które wysyłam, przychodzą z więcej niż jedną linią na sekundę, bufory danych się zwiększają i tracę statystyki w czasie rzeczywistym (nie wspominając o ryzyku przepełnienia bufora).

Czy można zrobić to, co próbuję zrobić z netcat, czy też muszę napisać coś w języku, który ma bibliotekę statystyk?


chociaż to nie rozwiązało twojego problemu, dodanie -q 0 rozwiązało mój problem
Colin

To dzieje się teraz w trybie TCP, co mnie tu sprowadziło.
baitisj

Odpowiedzi:


9

Naprawiłem problem, przechodząc do socat:

while read line; do
    printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done

Ponieważ nie było innych danych wejściowych, co rozwiązało mój problem, zaznaczam to jako odpowiedź.
bshacklett

Mogłeś dodać 1 sekundę do netcat (dodanie argumentów -w 1 prawdopodobnie by zadziałało).
parkamark

7

Możesz podać 0 jako wartość limitu czasu dla -w, aby w ogóle nie czekał.


To powinna być zaakceptowana odpowiedź.
Petrus K.

3
invalid wait-time 0
Limit

2

dodanie opcji -v rozwiązało mój problem. Nie jestem pewien.


2

Miałem ten sam problem; rozwiązał to za pomocą -copcji:

-c, --close                close connection on EOF from stdin

więc coś w stylu

while read line; do
    printf "folder.counter:value|1c" | nc -cu $host $port
done

Tak, naprawdę nie ma sensu „zamykać” połączenia udp - ale to zadziałało.


Dodanie -crozwiązało mój problem znetcat (The GNU Netcat) 0.7.1
Noah Sussman

0

Dla nas było to, że wysyłaliśmy ładunek nc z jednej maszyny na drugą za pomocą skryptu python. W pythonie, kiedy jawnie zakodowaliśmy ładunek w „UTF-8”, po prostu działało.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.