มีความแตกต่างที่สำคัญเมื่อเราพูดถึง "การเขียนโปรแกรมซ็อกเก็ต" เมื่อเทียบกับ "การเขียนโปรแกรมเครือข่าย" หรือไม่?
มีหัวข้อที่ครอบคลุม "การเขียนโปรแกรมเครือข่าย" แต่ไม่ใช่ "การเขียนโปรแกรมซ็อกเก็ต" หรือไม่?
มีความแตกต่างที่สำคัญเมื่อเราพูดถึง "การเขียนโปรแกรมซ็อกเก็ต" เมื่อเทียบกับ "การเขียนโปรแกรมเครือข่าย" หรือไม่?
มีหัวข้อที่ครอบคลุม "การเขียนโปรแกรมเครือข่าย" แต่ไม่ใช่ "การเขียนโปรแกรมซ็อกเก็ต" หรือไม่?
คำตอบ:
การเขียนโปรแกรมซ็อกเก็ต (อย่างน้อยเป็นคำที่ใช้ตามปกติ) เป็นการเขียนโปรแกรมไปยังเครือข่าย 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 ภายในเครื่องไม่ใช่เครือข่าย นอกจากนี้ยังมีโปรโตคอลอื่น ๆ อีกหลายสิบโปรโตคอลสำหรับสิ่งต่าง ๆ เช่นการจัดการเราเตอร์ที่ซ็อกเก็ตไม่รองรับ (นอกเหนือจากซ็อกเก็ตดิบที่อนุญาตให้คุณสร้างและส่งแพ็กเก็ตโดยพลการ)
"การเขียนโปรแกรมเครือข่าย" จะต้องใช้เทคโนโลยีระบบเครือข่าย - ตัวอย่างเช่น RPC ซ็อกเก็ต (ส่วนใหญ่คุณหมายถึงซ็อกเก็ต BSD) เป็นตัวอย่างของเทคโนโลยีดังกล่าว ดังนั้น "การเขียนโปรแกรมซ็อกเก็ต" เป็นส่วนย่อยของ "การเขียนโปรแกรมเครือข่าย"
ใช่มันเป็นความจริงที่การเขียนโปรแกรมเครือข่ายต้องใช้เทคโนโลยีเครือข่ายในขณะที่การเขียนโปรแกรมซ็อกเก็ตมือถือเป็นส่วนหนึ่งของการเขียนโปรแกรมเครือข่าย การเขียนโปรแกรมเครือข่ายส่วนใหญ่ในปัจจุบันนั้นใช้ซ็อกเก็ตโดยตรงหรือใช้เลเยอร์อื่น ๆ ที่ด้านบนของซ็อกเก็ต