স্ট্যাডিন বন্ধ হয়ে গেলে নেটক্যাট সমাপ্ত হয় না


11

আমি এর মাধ্যমে একটি বার্তা প্রেরণের চেষ্টা করছি netcat। বার্তা প্রেরণের পরে netcatঅবশ্যই শেষ করতে হবে।

আমি নিম্নলিখিত চেষ্টা করেছি:

cat tsmmessage.bin | nc -u localhost 4300
nc -u localhost 4300 < message.bin

-qবিকল্প পদ বলে:

-কেউ সেকেন্ড

স্টিডিনে ইওএফ-এর পরে, নির্দিষ্ট সেকেন্ডের জন্য অপেক্ষা করুন এবং তারপরে প্রস্থান করুন। যদি সেকেন্ড নেতিবাচক হয় তবে চিরকাল অপেক্ষা করুন।

কিন্তু

nc -q0 -u localhost 4300 < message.bin

এছাড়াও কাজ করে না।

আমি কী মিস করছি?

উত্তর:


6

ধরে নিই যে ইওএফ সংযোগটি প্রেরণের পরেও অলস থাকবে, আপনি -w timeoutবিকল্পটি ব্যবহার করতে পারেন , যা timeoutশূন্যের সমান হওয়ার জন্য কাজ করে (বোকা -qবিকল্পের বিপরীতে ...)

cat tsmmessage.bin | nc -u localhost 4300 -w0

1
এটি সঠিক উত্তর এবং এটির পরিবর্তে অবশ্যই গ্রহণযোগ্য হওয়া উচিত -q
সিসিপিজ্জা

1
শূন্য সময়ের বাইরে আমার মেশিনে কাজ করে না (ডিবিয়ান প্রসারিত)। এটি বলেছেinvalid wait-time 0
আনুবিস

3

-qপতাকা ছাড়া আপনার উদাহরণ netcatচিরকাল অপেক্ষা করবে। ইউডিপির সাথে কোনও "স্ট্রিমের শেষ" বার্তা নেই তাই স্টিডিন এবং নেটওয়ার্ক সংযোগ netcatউভয়ই শেষ হয়ে গেছে তা জানার উপায় নেই ।

উদাহরণস্বরূপ, টিসিপি / আইপি ব্যবহার করা এটি প্রত্যাশার মতো কাজ করে:

nc -l localhost 4300                     # Window 1
nc localhost 4300 </etc/group            # Window 2

তবে আপনি যেমন স্থির করেছেন, ইউডিপি / আইপি ব্যবহার করে এটি কখনই শেষ হয় না:

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অপ্রাসঙ্গিক।) এই ভালো কিছু, বাস্তবসম্মত অবস্থায় ব্যবহারের হতে পারে, যাতে netcat90 সেকেন্ড পর নিহত হয়:

timeout 90 nc -u -l localhost 4300       # Window 1
nc -q 1 -u localhost 4300 </etc/group    # Window 2

-q 0আমার জন্য কাজ কর.
অ্যালিকেলিন-কিলাকা

@ অ্যালিকেলজিন-কিলাকা যদিও আমার পক্ষে কাজ করে না। আপনি অবশ্যই আপনার পরীক্ষায় ইউডিপি ব্যবহার করছেন? নেটকাটের কোন সংস্করণ আপনার কাছে রয়েছে? আপনি সম্ভবত একটি সাম্প্রতিক সংস্করণে আছেন।
রোয়াইমা

0

UDP

# listen on receiver
nc -u -l localhost -p 4300

# sender
cat tsmmessage.bin | nc -u -N -q 0 localhost 4300

TCP

# listen on receiver
nc -l localhost -p 4300

# sender
cat tsmmessage.bin | nc -N localhost 4300

ডাউনভোটস কেন?
-N

-1

হুমকিতে পড়ে যখন গুগলিং প্রায় একই সমস্যা সম্পর্কিত। এতে সমস্যাটি দেখা গেল যে সমস্ত ডেটা সাফ হয়ে যাওয়ার পরে, প্রতিক্রিয়া পাওয়ার কোনও সুযোগ না পেয়ে নেটকেট বাশের হাতে মারা গিয়েছিল।

এটির জন্য আমার সমাধানটি হ'ল ডেটা পাইপ করার পরে কিছুটা বিলম্ব যুক্ত করা:

(echo INFO; sleep 1) | nc redis.service.consul 6379

একটি ফাইলের সাহায্যে এটি দেখতে পাওয়া যায়:

(cat tsmmessage.bin; sleep 5) | nc -u localhost 4300

netcatএখনও sleepশেষ হয় না যখন শেষ। আমি আশা করব প্রথম কমান্ড লাইনটি 1 সেকেন্ডের পরে প্রম্পটে ফিরে আসবে, তবে তা হয় না।
ফ্র্যাঙ্ক কুষ্টার্স

কিভাবে যোগ সম্পর্কে -q 1? অর্থাৎ (echo INFO; sleep 1) | nc -q 1 redis.service.consul 6379?
স্কাই রাইটার

সঙ্গে -qসবকিছু যে কাজ করছে, আমার আসল প্রশ্নে এমনকি উদাহরণ। আমি তখন থেকে উবুন্টুর একটি নতুন সংস্করণে চলে এসেছি, সম্ভবত এটিই পার্থক্যের কারণ হয়ে দাঁড়ায়।
ফ্রাঙ্ক কুষ্টার্স

এটা বিরক্তিকর. যাইহোক, খুশি আমরা দুজনেই এর আশেপাশে একটি উপায় খুঁজে পেয়েছি :)
স্কাই রাইটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.