นี่คือคำสั่งสรุปที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
ห่อหุ้ม - มัลติเพล็กซ์หลายช่องบนซ็อกเก็ตเดียวพร้อมสุ่มตัวอย่างระยะไกล
ประมวลผลสถานะการออก และให้การยุติการสนทนาโดยไม่ต้องปิดซ็อกเก็ต
เน็ตไปป์ 4.2
เรื่องย่อ
ห่อหุ้ม --fd n [ --รายละเอียด ] [ --โครงการย่อย [ --infd n[=SID- --outfd n[=SID-
--ดูเพล็กซ์ n[=SID- --ดูเพล็กซ์ n[=SID- --ดูเพล็กซ์ n[=SID- --ชอบ-ท้องถิ่น ] [
--ชอบระยะไกล ] [ --เฉพาะที่เท่านั้น ] [ --รีโมทเท่านั้น - --ลูกค้า ] [ --เซิร์ฟเวอร์ ]
-[#n][v][s[in][on][dn][ion][oin][l][r][L][R]] คำสั่ง args ...
DESCRIPTION
ห่อหุ้ม ใช้ Session Control Protocol (SCP) ในลักษณะที่จำกัด
ห่อหุ้ม มัลติเพล็กซ์ช่องเสมือนหลายช่องบนซ็อกเก็ตเดียวโดยใช้ SCP
ห่อหุ้ม ส่งสถานะทางออกของโปรแกรมท้องถิ่นไปยังปลายทางระยะไกลผ่านa
ช่อง SCP ที่จองไว้และรับสถานะทางออกระยะไกลกลับ ห่อหุ้ม ให้
ขอบเขตการสนทนาโดยไม่ต้องปิดซ็อกเก็ต
แฟล็กอาจปรากฏขึ้นในลำดับใดก็ได้ อาร์กิวเมนต์แรกที่ไม่ใช่แฟล็กคือคำสั่งto
วางไข่ (สมมติ --โครงการย่อย ถูกระบุ ผิดพลาดประการอื่น)
OPTIONS
--fd n, -#n : ระบุ file descriptor ของ socket ที่เราจะทำการ multiplexing subprocess
ช่องกว่า. อาร์กิวเมนต์นี้จำเป็นต้องมี
--รายละเอียด, -v : พิมพ์ข้อมูลเพิ่มเติม (รวมถึงประกาศเกี่ยวกับลิขสิทธิ์) ไปที่ stderr
--โครงการย่อย, -s : วางไข่โปรเซสย่อย คุณต้องจัดหา คำสั่ง และ args. หากคุณละเว้นนี้
ธง แล้วคุณต้อง ไม่ จัดหา a คำสั่ง และ args. หากคุณละเว้นแฟล็กนี้ ห่อหุ้ม
จะคัดลอกอินพุตจาก stdin ไปยังช่องสัญญาณขาออกในซ็อกเก็ต SCP-muxed และคัดลอกไปที่
stdout จากช่องสัญญาณขาเข้าในซ็อกเก็ต SCP-muxed หากคุณละเว้นแฟล็กนี้ ทั้งหมด
แฟล็กช่องสัญญาณอินพุตและเอาต์พุตผิดกฎหมาย
--infd n, -in : ระบุช่องสัญญาณเข้า หากมีกระบวนการย่อยก็จะสามารถ
อ่านจากคำอธิบาย n. หากไม่มีกระบวนการย่อย ห่อหุ้ม จะอ่านจากมัน
คำอธิบาย n (สิ่งเหล่านี้เป็นขั้วตรงข้ามสำหรับช่อง SCP)
--outfd n, -on : ระบุช่องสัญญาณออก หากมีกระบวนการย่อยก็จะสามารถ
เขียนบรรยาย n. หากไม่มีกระบวนการย่อย ห่อหุ้ม จะเขียนถึงคำอธิบายของมัน
n (สิ่งเหล่านี้เป็นขั้วตรงข้ามสำหรับช่อง SCP)
--ดูเพล็กซ์ n, -ไอโอn : ระบุช่องสัญญาณแบบสองทิศทาง รีโมท ห่อหุ้ม จะส่ง
แพ็กเก็ต SCP SYN และโลคัลจะตอบกลับด้วย SYN สำหรับเซสชันเดียวกัน NS
กระบวนการย่อยจะสามารถอ่านและเขียนไฟล์ descriptor . ได้ n. กระบวนการย่อยควรใช้
ถุงเท้า(1) โปรแกรมหากต้องปิดทิศทางหนึ่งขณะออกจากอีกทิศทางหนึ่ง
เปิด.
--ดูเพล็กซ์ n, -dn : ระบุช่องสัญญาณแบบสองทิศทาง NS --ลูกค้า จุดสิ้นสุดของ ห่อหุ้ม
การเชื่อมต่อส่งแพ็กเก็ต SCP SYN และ --เซิร์ฟเวอร์ ตอบกลับด้วย SYN สำหรับเซสชันเดียวกัน
กระบวนการย่อยจะสามารถอ่านและเขียนไฟล์ descriptor . ได้ n. กระบวนการย่อยควร
ใช้ ถุงเท้า(1) โปรแกรมหากต้องปิดทิศทางเดียวขณะออกจากอีกทางหนึ่ง
ทิศทางเปิด
--ดูเพล็กซ์ n, -อ้อยn : ระบุช่องสัญญาณแบบสองทิศทาง ท้องถิ่น ห่อหุ้ม จะส่ง
แพ็กเก็ต SCP SYN และรีโมตจะตอบสนองด้วย SYN สำหรับเซสชันเดียวกัน NS
กระบวนการย่อยจะสามารถอ่านและเขียนไฟล์ descriptor . ได้ n. กระบวนการย่อยควรใช้
ถุงเท้า(1) โปรแกรมหากต้องปิดทิศทางหนึ่งขณะออกจากอีกทิศทางหนึ่ง
เปิด.
ช่องสัญญาณแบบสองทิศทางแบบยาวทั้งหมดมีตัวเลือก =SID องค์ประกอบที่
สามารถใช้ระบุรหัสเซสชันของ SCP ได้ สิ่งนี้ไม่มีประโยชน์มากเมื่อเชื่อมต่อ
ห่อหุ้มไปยังอีกตัวอย่างหนึ่งของตัวเอง แต่อาจสะดวกเมื่อเชื่อมต่อกับตัวอื่น
ซอฟต์แวร์ที่ใช้ SCP
--ชอบ-ท้องถิ่น, -l : ถ้าทั้งกระบวนการย่อยระยะไกลและภายในเครื่องออกด้วยค่าที่ไม่ใช่ศูนย์
(ผิดพลาด) รหัส ห่อหุ้ม จะออกด้วยรหัสเดียวกันกับกระบวนการย่อยในเครื่อง แจกันดอกไม้โรแมนติกนี้
is ค่าเริ่มต้น.
--ชอบระยะไกล, -r : ถ้าทั้งกระบวนการย่อยระยะไกลและภายในเครื่องออกด้วยค่าที่ไม่ใช่ศูนย์
(ผิดพลาด) รหัส ห่อหุ้ม จะออกด้วยรหัสเดียวกันกับกระบวนการย่อยระยะไกล
--เฉพาะที่เท่านั้น, -L : ห่อหุ้ม ออกด้วยสถานะท้องถิ่นและละเว้นสถานะระยะไกล
--รีโมทเท่านั้น, -R : ห่อหุ้ม ออกด้วยสถานะระยะไกลและละเว้นสถานะในเครื่อง
เซสชั่น รหัส AND กระบวนการย่อย ช่อง
เมื่อระบุแชนเนลสำหรับโปรเซสย่อย ลำดับของแฟล็กมีความสำคัญมาก
ทุกธงไปยังท้องถิ่น ห่อหุ้ม ต้องมีแฟล็กที่สอดคล้องกันบนรีโมท
ห่อหุ้ม ที่อยู่ในตำแหน่งเดียวกันทุกประการ (ในรายการช่อง) คำอธิบาย
ตัวเลขไม่จำเป็นต้องตรงกัน แต่ตำแหน่งและประเภทของแต่ละช่องจะต้อง
ปัจจัยที่ซับซ้อนอย่างน่าเศร้าคือการไหลของข้อมูลโดยนัยโดย --infd และ --outfd เป็น
แตกต่างกันเมื่อคุณระบุกระบวนการย่อย
รีโมทท้องถิ่น
--infd พร้อมขั้นตอนย่อย --outfd พร้อมขั้นตอนย่อย
--infd พร้อมขั้นตอนย่อย --infd
--infd --infd พร้อมขั้นตอนย่อย
--infd --outfd
--outfd พร้อมขั้นตอนย่อย --infd พร้อมขั้นตอนย่อย
--outfd พร้อมขั้นตอนย่อย --outfd
--outfd --outfd พร้อมขั้นตอนย่อย
--outfd --infd
--ดูเพล็กซ์ --ดูเพล็กซ์
--ดูเพล็กซ์ --ดูเพล็กซ์
--ดูเพล็กซ์ --ดูเพล็กซ์
ขวา:
l$ แค็ปซูล --infd 0 --duplex 5
r$ ห่อหุ้ม --outfd 1 --DUPLEX 5
ไม่ถูกต้อง:
l$ แค็ปซูล --infd 0 --duplex 5
r$ ห่อหุ้ม --outfd 1 --duplex 5
--ดูเพล็กซ์ ต้องมีที่สอดคล้องกัน --ดูเพล็กซ์ ที่ปลายระยะไกล
l$ แค็ปซูล --infd 0 --duplex 5
r$ ห่อหุ้ม --DUPLEX 5 --outfd 1
--infd ต้องมีที่สอดคล้องกัน --outfd ที่ปลายระยะไกล มันผิดปกติและ
ช่องทางจะถูกจัดสรรอย่างไม่ถูกต้องทำให้เกิดข้อผิดพลาดของโปรโตคอล
หากคุณเข้าใจซอร์สโค้ดของ ห่อหุ้มคุณสามารถละเมิดหลักเกณฑ์เหล่านี้ได้ แต่
ไม่จำเป็น เสี่ยงต่อข้อผิดพลาด และไม่ได้รับคำแนะนำที่ดี นอกจากนั้น คุณยังไม่เข้าใจ
รหัสแหล่งที่มา. อย่าทำมัน
CLIENT -VS- SERVER
SCP มีขั้วโดยปริยาย ปลายด้านหนึ่งเป็นเซิร์ฟเวอร์และปลายอีกด้านหนึ่งเป็นไคลเอ็นต์
คุณสามารถระบุได้ว่าจุดสิ้นสุดใดโดยใช้ --ลูกค้า และ --เซิร์ฟเวอร์. ถ้าไม่ระบุ
หนึ่ง แล้ว ห่อหุ้ม จะเปรียบเทียบที่อยู่ของปลายทั้งสองของซ็อกเก็ต (ระบุ
สีสดสวย --fd) และใช้อัลกอริธึมที่กำหนดขึ้นเพื่อเลือกอันหนึ่งที่จะเป็นเซิร์ฟเวอร์และอีกอันหนึ่งที่จะเป็น
ลูกค้า. หากที่อยู่ระยะไกลของซ็อกเก็ตไม่ตรงกับรีโมท
ห่อหุ้ม (เช่น แพ็กเก็ตจะถูกส่งต่อผ่านเกตเวย์ที่เสียบอยู่ ที่อยู่
กำลังถูกปิดบังหรือถูกรับรู้โดยปลายทั้งสองข้างไม่สอดคล้องกัน) แล้ว
อัลกอริธึมนี้มีโอกาสดีที่จะ "ล้มเหลว" และกำหนดให้ทั้งคู่เป็นเซิร์ฟเวอร์หรือทั้งสองอย่าง
เป็นลูกค้า
ครั้งเดียวที่คุณควรปล่อยให้ ห่อหุ้ม เลือกระหว่างไคลเอนต์และเซิร์ฟเวอร์อยู่ใน
สถานการณ์แบบโต้ตอบ เป็นไปได้มากที่ระบบซอฟต์แวร์สร้างขึ้นโดย ห่อหุ้ม
จะถูกนำมาใช้ซ้ำในสถานการณ์ที่การกำหนดขั้วอัตโนมัติล้มเหลว
ตัวอย่าง
นี่คือภูตการถ่ายโอนไฟล์อย่างง่าย:
เซิร์ฟเวอร์ $ 3001 --ครั้งเดียว --fd3 \
sh -c 'ในขณะที่ ~/src/netpipes4.0/encapsulate --fd 3 -so5i4 \
sh -c "fname=`cat 0<&4`; echo \$fname; cat < \$fname 1>&5"; \
ทำจริง; เสร็จแล้ว'
ลูกค้า $ ท่อเซิร์ฟเวอร์ 3001 -- ลองใหม่ 10 -- ล่าช้า 1 --fd3 \
sh -c 'ขณะอ่าน fname; ทำ \
~/src/netpipes4.0/encapsulate --fd 3 -si4o5 \
sh -c "echo $fname 1>&5; exec 5>&-; cat 0<&4" \
|| หยุดพัก; เสร็จแล้ว'
เพียงพิมพ์ชื่อไฟล์ที่คุณต้องการดึงข้อมูลลงในท่อและกด return มัน
จะถูกทิ้งไปที่ stdout ทำซ้ำจนกว่าจะรู้แจ้งหรือเบื่อ
การแก้ไขปัญหา
คุณระบุ --ลูกค้า และ --เซิร์ฟเวอร์ อย่างถูกต้อง? ด้านหนึ่งควรเป็นเซิร์ฟเวอร์ อีกด้านหนึ่ง
ควรเป็นลูกค้า หากคุณระบุทั้งคู่เป็นเซิร์ฟเวอร์หรือทั้งคู่เป็นไคลเอนต์ แสดงว่าคุณทำ
ความผิดพลาด. อย่าพึ่งพาการตรวจจับขั้วอัตโนมัติ ในขณะที่ในทางทฤษฎี a
อัลกอริธึมที่ดีมาก มันถูกหลอกง่ายมาก
ทำงานมอบหมายช่องทั้งหมดของคุณ (--infd et al) จับคู่? ถ้าคุณเข้าใจสิ่งเหล่านี้ผิด
ห่อหุ้ม จะคลั่งไคล้และหยดขยะไปทั่วรองเท้าของคุณ
เพื่อหลีกเลี่ยงการชะงักงัน ตรวจสอบให้แน่ใจว่าคุณกำลังปิดช่องเมื่อไม่ต้องการใช้
อีกต่อไป. ใช้ตัวดำเนินการเปลี่ยนเส้นทาง >&- ใน sh หรือ bash รับรองว่าปิดครบ
ของกระบวนการเบื้องหลังเช่นกัน
ไม่สามารถอ่าน stdin จากกระบวนการที่มีพื้นหลังเป็น & ? Bash ปิดไฟล์
descriptor 0 สำหรับกระบวนการย่อยใดๆ ที่มีพื้นหลัง (เช่น (command&) ) คุณสามารถได้รับ
รอบๆ นี้โดยคัดลอก 0 ไปยัง descriptor อื่น แล้วคัดลอกกลับภายใน
กระบวนการเบื้องหลัง
( ( แมว 0<&3 ) & ) 3<&0
ใช้แค็ปซูลออนไลน์โดยใช้บริการ onworks.net