UDP मोड में nc (netcat) अधिक डेटा के इंतजार में लटका रहता है।


16

मैं पढ़े हुए ब्लॉक के अंदर nc के माध्यम से एक छोटी स्ट्रिंग भेजने की कोशिश कर रहा हूँ:

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

दुर्भाग्य से, जब UDP मोड में, nc अनिश्चित काल तक प्रतीक्षा करना चाहता है, भले ही मैंने निर्दिष्ट किया हो -q 0, जो कि मैन पेज कहता है कि EOF के तुरंत बाद प्रोग्राम से बाहर निकल जाएगा।

मैंने पासिंग की कोशिश की है -w 1, लेकिन अगर मैं जो डेटा भेज रहा हूं, वह प्रति सेकंड एक से अधिक लाइन में आता है, तो डेटा बफ़र करता है, और मैं अपना वास्तविक समय आँकड़े खो देता हूं (किसी प्रकार के बफर ओवरफ़्लो को जोखिम में डालने का उल्लेख नहीं करने के लिए)।

क्या ऐसा करना संभव है जो मैं netcat के साथ करने की कोशिश कर रहा हूं, या क्या मुझे उस भाषा में कुछ लिखने की ज़रूरत है जिसमें कोई डेटाड लाइब्रेरी है?


हालांकि यह आपका हल नहीं था, -q 0 ने मेरे मुद्दे को हल किया
कॉलिन

यह अब टीसीपी मोड में होता है, जो मुझे यहां लाया है।
२१:२५

जवाबों:


9

मैंने समस्या को हल करके समाप्त किया socat:

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

जैसा कि कोई अन्य इनपुट नहीं है, और इससे मेरी समस्या हल हो गई, मैं इसे उत्तर के रूप में चिह्नित कर रहा हूं।
bshacklett

आपने netcat में 1 सेकंड का समय जोड़ा हो सकता है (तर्क जोड़कर -w 1 ने शायद काम किया होगा)।
पार्कमार्क

7

-W के लिए आप टाइमआउट मान के रूप में 0 निर्दिष्ट कर सकते हैं, इसलिए यह बिल्कुल भी प्रतीक्षा नहीं करेगा।


यह स्वीकृत उत्तर होना चाहिए।
पेट्रस के।

3
शून्य समयावधि अस्वीकार्य है, त्रुटि:invalid wait-time 0
एस्ट्रासेर्ज

2

जोड़ने -v विकल्प मेरी समस्या हल हो गई। कारण मैं निश्चित नहीं हूं।


2

मेरे पास एक ही मुद्दा था; -cविकल्प का उपयोग कर इसे हल किया :

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

ऐसा कुछ

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

हाँ, वास्तव में एक यूडीपी-कनेक्शन को "बंद" करने का कोई मतलब नहीं है - लेकिन यह काम करना समाप्त कर देता है।


जोड़ना -cसाथ मेरी समस्या हलnetcat (The GNU Netcat) 0.7.1
नूह Sussman

0

हमारे लिए, यह था कि हम एक अजगर स्क्रिप्ट के माध्यम से एक मशीन से दूसरे पर एक एनसी पेलोड भेज रहे थे। अजगर में, जब हमने 'UTF-8' में पेलोड को स्पष्ट रूप से कूटबद्ध किया, तो यह काम कर गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.