Sự khác biệt giữa lập trình mạng và lập trình socket


16

Có sự khác biệt lớn nào khi chúng ta nói về "lập trình ổ cắm" so với "lập trình mạng" không?

Có một số chủ đề bao gồm "lập trình mạng" nhưng không phải là "lập trình ổ cắm"?

Câu trả lời:


26

Lập trình socket (ít nhất là thuật ngữ thường được sử dụng) là lập trình cho một API mạng cụ thể. Ổ cắm hỗ trợ các giao thức dựa trên IP (chủ yếu là TCP và UDP) 1 .

Lập trình mạng có thể được thực hiện bằng nhiều API khác nhau. Windows có một số API độc lập giao thức như các hàm WNet * và Net *. Các phiên bản cũ hơn của Windows cũng sử dụng NetBIOS / NetBEUI (Giao diện người dùng cuối NetBIOS) và được hỗ trợ nhiều nhất (và có thể vẫn làm) IPX / SPX (giao thức Netware cũ).

Tuy nhiên, hầu hết các chương trình mạng hiện tại được thực hiện bằng cách sử dụng trực tiếp các ổ cắm hoặc sử dụng nhiều lớp khác trên đầu ổ cắm (ví dụ: khá nhiều việc được thực hiện qua HTTP, thường được thực hiện với TCP qua các ổ cắm). TCP / IP và UDP / IP (cũng như một số giao thức dựa trên IP khác) được thực hiện chủ yếu thông qua giao diện ổ cắm. Về lý thuyết, các giao diện lập trình khác có thể được sử dụng, nhưng trong thực tế các ổ cắm dường như là đủ, vì vậy không có nhiều mối quan tâm trong việc thay thế nó. Tuy nhiên, tôi nên đề cập rằng các ổ cắm Windows (WinSock) có khá nhiều tiện ích mở rộng ít nhiều duy nhất cho Windows. Tôi cho rằng nó mở cho một số đối số cho dù mã sử dụng các tiện ích mở rộng này có thực sự đủ điều kiện là mã "socket" hay không - chúng là các tiện ích mở rộng dựa trên cùng các khái niệm, nhưng mã sử dụng chúng không phải là ' t thường di động đến các hệ thống khác. Tôi đoán liệu nó có đủ điều kiện là "ổ cắm" hay không phụ thuộc chủ yếu vào việc bạn nghĩ về ổ cắm nhiều hơn như một khái niệm hay một bộ chức năng, tham số rất cụ thể, v.v.

Chỉnh sửa (trả lời nhận xét):

Thật khó để nói liệu "biết ổ cắm" có ngụ ý biết "mọi thứ" về TCP và UDP hay không. Chúng ta hãy xem xét chỉ một điều nhỏ: một chương trình demo điển hình cho các socket là tạo chương trình trò chuyện máy khách / máy chủ. Máy khách kết nối với máy chủ và khi người dùng trên một máy khách gõ một cái gì đó, nó sẽ được chuyển tiếp đến các máy khách khác được kết nối với cùng một máy chủ. Mỗi máy khách hiển thị những gì đến từ máy chủ và cho phép người dùng nhập tin nhắn được gửi đến các máy khách khác.

Đồng thời, hãy xem xét những gì một chương trình trò chuyện "thực" như AIM, Windows Messenger, iChat, v.v. Để xử lý không chỉ văn bản, mà cả giọng nói, video, chuyển tập tin, nhóm, danh sách, v.v., một chương trình điển hình có thể bao gồm hàng tá các tiêu chuẩn khác nhau, bao gồm những thứ như SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS, v.v. .

IMO, ai đó "biết ổ cắm" sẽ có thể mã hóa chương trình trò chuyện đầu tiên (cấp độ demo, chỉ văn bản) trong vài giờ mà không mất nhiều thời gian trong các tệp trợ giúp (và như vậy) khi thực hiện nghiên cứu. Trừ khi họ tuyên bố ít nhất một số kinh nghiệm trước đây khi làm việc trên một chương trình trò chuyện "thực sự", tôi sẽ không mong họ thậm chí biết RFC / tiêu chuẩn nào được áp dụng cho những điều đó.

Nói chung cũng áp dụng như vậy: với số lượng RFC (và nhiều tiêu chuẩn khác) được áp dụng cho tất cả những điều khác nhau mà mọi người làm trên mạng, thật vô lý khi hy vọng bất kỳ ai sẽ ghi nhớ tất cả chúng. Tuy nhiên, nếu bạn có một bộ yêu cầu cho một thứ gì đó mà bạn mong muốn mọi người có thể xử lý dễ dàng trong chương trình "cục bộ", chỉ cần thêm "qua mạng" là một yêu cầu thường không gây thêm khó khăn lớn (mặc dù xử lý các vấn đề như độ trễ mạng có thể).


1 Ổ cắm trên Unix cũng hỗ trợ ổ cắm gia đình Unix, nhưng chúng là (ít nhất là bình thường) được sử dụng cho IPC trong máy, không kết nối mạng. Ngoài ra còn có hàng tá các giao thức khác cho những thứ như quản lý bộ định tuyến mà các socket không thực sự hỗ trợ (ngoài các socket thô cho phép bạn xây dựng và gửi các gói tùy ý).


Cảm ơn, bây giờ đây là một câu trả lời đáng nâng cao. :-) Vì vậy, tôi có thể kết luận rằng khi tôi nói tôi biết lập trình socket, điều đó có nghĩa là chỉ xử lý " mọi thứ " với TCP / UDP không? Tôi cần biết mọi thứ về TCP / UDP?
Aquarius_Girl

@AqueraKaul: Xem câu trả lời được chỉnh sửa.
Jerry Coffin

@JerryCoffin: Có thể đáng chú ý rằng các socket cũng là một tập hợp con của các giao thức dựa trên IP. Có những thứ như ICMP / IP không được bao phủ bởi các ổ cắm.
Matthew Scharley

6

"lập trình mạng" sẽ yêu cầu một số công nghệ mạng - ví dụ: RPC. Ổ cắm (rất có thể bạn có nghĩa là ổ cắm BSD) là một ví dụ về công nghệ như vậy. Vì vậy, "lập trình socket" là một tập hợp con của "lập trình mạng".


@Aquera Kaul: Được rồi, lập trình RPC là lập trình mạng (một tập hợp con) và một khái niệm RPC quan trọng là cái gọi là liên kết chuỗi - xem msdn.microsoft.com/en-us/l Library / aa378691 (v = VS85 ) .aspx Bạn không cần điều đó khi lập trình ổ cắm BSD.
sharptooth

@Aquera Kaul: Không, "tất cả các khả năng" là một danh sách lớn. Tôi muốn đặt tên cho một số được sử dụng rộng rãi - Java RMI và .NET Remote là những ví dụ điển hình.
sharptooth

-3

Vâng, đúng là lập trình mạng yêu cầu công nghệ mạng trong khi mặt khác lập trình ổ cắm là một tập hợp con của lập trình mạng. Hầu hết các chương trình mạng hiện tại được thực hiện bằng cách sử dụng trực tiếp các ổ cắm hoặc sử dụng các lớp khác trên đầu ổ cắm.


3
điều này dường như không thêm bất cứ điều gì đáng kể vào những gì đã được đăng trong các câu trả lời trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.