ความแตกต่างระหว่างการเขียนโปรแกรมเครือข่ายและการเขียนโปรแกรมซ็อกเก็ต


16

มีความแตกต่างที่สำคัญเมื่อเราพูดถึง "การเขียนโปรแกรมซ็อกเก็ต" เมื่อเทียบกับ "การเขียนโปรแกรมเครือข่าย" หรือไม่?

มีหัวข้อที่ครอบคลุม "การเขียนโปรแกรมเครือข่าย" แต่ไม่ใช่ "การเขียนโปรแกรมซ็อกเก็ต" หรือไม่?

คำตอบ:


26

การเขียนโปรแกรมซ็อกเก็ต (อย่างน้อยเป็นคำที่ใช้ตามปกติ) เป็นการเขียนโปรแกรมไปยังเครือข่าย API หนึ่งที่เฉพาะเจาะจง ซ็อกเก็ตสนับสนุนโปรโตคอล IP-based (ส่วนใหญ่ TCP และ UDP) 1

การเขียนโปรแกรมเครือข่ายสามารถทำได้โดยใช้ API อื่น ๆ Windows มี APIs ที่ไม่ขึ้นกับโปรโตคอลเช่นฟังก์ชัน WNet * และ Net * Windows รุ่นเก่ายังใช้ NetBIOS / NetBEUI (NetBIOS End User Interface) และรองรับมากที่สุด (และอาจจะยังคงทำ) IPX / SPX (โปรโตคอล Netware เก่า)

อย่างไรก็ตามการเขียนโปรแกรมเครือข่ายส่วนใหญ่ในปัจจุบันนั้นทำได้โดยใช้ซ็อกเก็ตโดยตรงหรือใช้เลเยอร์อื่น ๆ อีกมากมายที่ด้านบนของซ็อกเก็ต (เช่นมีการดำเนินการผ่าน HTTP ค่อนข้างมาก TCP / IP และ UDP / IP (รวมถึงโปรโตคอลอื่น ๆ ที่ใช้ IP) จะทำผ่านทางอินเตอร์เฟสของซ็อกเก็ตเป็นหลัก ในทางทฤษฎีสามารถใช้อินเตอร์เฟสการเขียนโปรแกรมอื่นได้ แต่ในทางปฏิบัติซ็อกเก็ตดูเหมือนจะเพียงพอดังนั้นจึงไม่มีความสนใจในการแทนที่มันมากนัก อย่างไรก็ตามฉันควรพูดถึงว่าซ็อกเก็ต Windows (WinSock) มีนามสกุลค่อนข้างน้อยที่ไม่ซ้ำกับ Windows ฉันคิดว่ามันเปิดให้มีการโต้แย้งว่ารหัสที่ใช้ส่วนขยายเหล่านี้จริงๆมีคุณสมบัติเป็นรหัส "ซ็อกเก็ต" หรือไม่ - พวกเขาเป็นส่วนขยายตามแนวคิดเดียวกัน แต่รหัสที่ใช้พวกเขา isn ' ปกติพกพาไปยังระบบอื่นไม่ได้ ฉันเดาว่ามันจะมีคุณสมบัติเป็น "ซ็อกเก็ต" หรือไม่ขึ้นอยู่กับว่าคุณคิดว่าซ็อกเก็ตเป็นแนวคิดมากขึ้นหรือชุดของฟังก์ชั่นพารามิเตอร์และอื่น ๆ ที่เฉพาะเจาะจง

แก้ไข (ตอบกลับความคิดเห็น):

เป็นการยากที่จะบอกว่าการรู้ซ็อกเก็ตหมายถึงการรู้ทุกอย่างเกี่ยวกับ TCP และ UDP ลองพิจารณาสิ่งเล็ก ๆ น้อย ๆ ชิ้นเดียว: โปรแกรมตัวอย่างหนึ่งโปรแกรมสำหรับซ็อกเก็ตคือการสร้างโปรแกรมแชทไคลเอนต์ / เซิร์ฟเวอร์ ไคลเอนต์เชื่อมต่อกับเซิร์ฟเวอร์และเมื่อผู้ใช้บนไคลเอนต์หนึ่งพิมพ์บางอย่างมันจะถูกส่งต่อไปยังไคลเอนต์อื่น ๆ ที่เชื่อมต่อกับเซิร์ฟเวอร์เดียวกัน ลูกค้าแต่ละรายแสดงสิ่งที่มาจากเซิร์ฟเวอร์และให้ผู้ใช้พิมพ์ข้อความที่จะส่งไปยังลูกค้ารายอื่น

ในขณะเดียวกันให้พิจารณาว่าโปรแกรมแชท "ของจริง" เช่น AIM, Windows Messenger, iChat ฯลฯ เกี่ยวข้องกับอะไร ในการจัดการกับข้อความไม่เพียง แต่เสียงวิดีโอการถ่ายโอนไฟล์กลุ่มรายการ ฯลฯ โปรแกรมทั่วไปอาจเกี่ยวข้องกับมาตรฐานที่แตกต่างกันหลายโหลรวมถึงสิ่งต่างๆเช่น SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS ฯลฯ .

IMO คนที่รู้จักซ็อกเก็ตควรจะสามารถเขียนรหัสโปรแกรมแชทแรก (สาธิตระดับข้อความเท่านั้น) ในเวลาไม่กี่ชั่วโมงโดยไม่ต้องใช้เวลามากในการช่วยเหลือไฟล์ (และอื่น ๆ ) ในการทำวิจัย หากพวกเขาอ้างว่าอย่างน้อยประสบการณ์ก่อนหน้านี้ที่ทำงานในโปรแกรมแชท "ของจริง" ฉันไม่คาดหวังให้พวกเขารู้ว่า RFCs / มาตรฐานใดที่นำไปใช้กับสิ่งเหล่านั้น

เช่นเดียวกับโดยทั่วไป: เนื่องจากจำนวน RFCs (และมาตรฐานอื่น ๆ ) ที่นำไปใช้กับสิ่งต่าง ๆ ที่ผู้คนทำผ่านเครือข่ายจึงไม่มีเหตุผลที่จะคาดหวังว่าทุกคนจะจดจำสิ่งเหล่านี้ได้ทั้งหมด อย่างไรก็ตามหากคุณมีข้อกำหนดหลายประการสำหรับสิ่งที่คุณคาดหวังให้ผู้คนสามารถจัดการในโปรแกรม "ท้องถิ่น" ได้อย่างง่ายดายเพียงแค่เพิ่ม "ผ่านเครือข่าย" เนื่องจากความต้องการไม่ควรเพิ่มความยากลำบากมากมาย (แม้ว่าการจัดการกับปัญหาเช่นเวลาแฝงเครือข่ายอาจ)


1 Sockets บน Unix รองรับซ็อกเก็ต Unix ตระกูลด้วย แต่อย่างน้อย (ปกติอย่างน้อยที่สุด) ที่ใช้สำหรับ IPC ภายในเครื่องไม่ใช่เครือข่าย นอกจากนี้ยังมีโปรโตคอลอื่น ๆ อีกหลายสิบโปรโตคอลสำหรับสิ่งต่าง ๆ เช่นการจัดการเราเตอร์ที่ซ็อกเก็ตไม่รองรับ (นอกเหนือจากซ็อกเก็ตดิบที่อนุญาตให้คุณสร้างและส่งแพ็กเก็ตโดยพลการ)


ขอบคุณตอนนี้เป็นคำตอบที่ควรค่าสำหรับการเลื่อน :-) ดังนั้นฉันสามารถสรุปได้ว่าเมื่อฉันบอกว่าฉันรู้ว่าการเขียนโปรแกรมซ็อกเก็ตมันหมายถึงการจัดการ " ทุกอย่าง " กับ TCP / UDP เท่านั้นหรือไม่ ฉันจำเป็นต้องรู้ทุกอย่างเกี่ยวกับ TCP / UDP หรือไม่
Aquarius_Girl

@AnishaKaul: ดูคำตอบที่แก้ไขแล้ว
Jerry Coffin

@JerryCoffin: อาจเป็นไปได้ว่าซ็อกเก็ตนั้นเป็นส่วนหนึ่งของโปรโตคอลบน IP เช่นกัน มีหลายอย่างเช่น ICMP / IP ที่ไม่ได้อยู่ในซ็อกเก็ต
Matthew Scharley

6

"การเขียนโปรแกรมเครือข่าย" จะต้องใช้เทคโนโลยีระบบเครือข่าย - ตัวอย่างเช่น RPC ซ็อกเก็ต (ส่วนใหญ่คุณหมายถึงซ็อกเก็ต BSD) เป็นตัวอย่างของเทคโนโลยีดังกล่าว ดังนั้น "การเขียนโปรแกรมซ็อกเก็ต" เป็นส่วนย่อยของ "การเขียนโปรแกรมเครือข่าย"


@Anisha Kaul: โอเคการเขียนโปรแกรม RPC คือการเขียนโปรแกรมเครือข่าย (ส่วนย่อยของมัน) และแนวคิดหนึ่งที่สำคัญของ RPC คือการผูกสตริงที่เรียกว่า- ดูmsdn.microsoft.com/en-us/library/aa378691(v=VS.85) .aspxคุณไม่ต้องการสิ่งนั้นเมื่อตั้งโปรแกรมซ็อกเก็ต BSD
sharptooth

@Anisha Kaul: ไม่ "ความเป็นไปได้ทั้งหมด" เป็นรายการใหญ่ ฉันชื่อบางอย่างที่ใช้กันอย่างแพร่หลาย - Java RMI และ. NET Remoting เป็นตัวอย่างที่ดี
sharptooth

-3

ใช่มันเป็นความจริงที่การเขียนโปรแกรมเครือข่ายต้องใช้เทคโนโลยีเครือข่ายในขณะที่การเขียนโปรแกรมซ็อกเก็ตมือถือเป็นส่วนหนึ่งของการเขียนโปรแกรมเครือข่าย การเขียนโปรแกรมเครือข่ายส่วนใหญ่ในปัจจุบันนั้นใช้ซ็อกเก็ตโดยตรงหรือใช้เลเยอร์อื่น ๆ ที่ด้านบนของซ็อกเก็ต


3
นี้ดูเหมือนจะไม่เพิ่มอะไรที่สำคัญมากกว่าสิ่งที่ถูกโพสต์ไว้แล้วในคำตอบก่อน
ริ้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.