Answers:
套接字编程(至少通常使用该术语)是针对一种特定的网络API进行编程。套接字支持基于IP的协议(主要是TCP和UDP)1。
可以使用其他各种API进行网络编程。Windows具有许多与协议无关的API,例如WNet *和Net *函数。Windows的较早版本也使用NetBIOS / NetBEUI(NetBIOS最终用户界面),并且大多数受支持(并且可能仍然支持)IPX / SPX(旧的Netware协议)。
但是,当前大多数网络编程都是直接使用套接字或在套接字顶部使用其他各种层来完成的(例如,很多事情是通过HTTP完成的,通常是通过套接字上的TCP实现的)。TCP / IP和UDP / IP(以及许多其他基于IP的协议)主要通过套接字接口完成。从理论上讲,可以使用其他编程接口,但是实际上套接字似乎足够了,因此替换它并没有太大的兴趣。但是,我应该提到Windows套接字(WinSock)具有许多Windows特有的扩展。我认为,使用这些扩展名的代码是否真的符合“套接字”代码的说法尚有争议,它们是基于相同概念的扩展,而使用它们的代码则是“ 通常可以移植到其他系统。我猜它是否符合“套接字”的资格,主要取决于您是否将套接字更多地看作是一个概念,还是一组非常具体的功能,参数等。
编辑(回复评论):
很难说“了解套接字”是否意味着了解TCP和UDP的“所有知识”。让我们考虑一小部分:套接字的一个典型演示程序是创建一个客户端/服务器聊天程序。客户端连接到服务器,并且当一个客户端上的用户键入内容时,它将转发到连接到同一服务器的其他客户端。每个客户端都显示来自服务器的内容,并允许用户键入要发送给其他客户端的消息。
同时,考虑一下诸如AIM,Windows Messenger,iChat等“真正的”聊天程序所涉及的内容。为了不仅处理文本,还处理语音,视频,文件传输,组,列表等,典型的程序可能涉及许多不同的标准,包括SIP,STUN,TURN,RTCP,RTP,XAMPP,mDNS等。 。
IMO,一个“知道套接字”的人应该能够在几个小时内编写出第一个(演示级别的,纯文本的)聊天程序,而不必花费大量时间在帮助文件(或类似文件)上进行研究。除非他们声称至少有一些有关“真实”聊天程序的工作经验,否则我什至不希望他们知道哪一种RFC /标准适用于此类事情。
一般而言,这同样适用:鉴于RFC(以及各种其他标准)已应用于人们在网络上所做的所有不同事情,因此期望有人记住所有这些都是不合理的。但是,如果您对人们希望能够轻松地在“本地”程序中处理的事情有一套要求,那么仅将“通过网络”添加为要求通常不会增加很多难度(尽管可能会处理网络延迟等问题)。
1 Unix上的套接字也支持Unix系列套接字,但是这些套接字(至少通常)用于计算机内IPC,而不是网络。从字面上看,还有很多其他协议,例如路由器管理,套接字实际上并不支持这些协议(原始套接字允许您构建和发送任意数据包)。
“网络编程”将需要一些联网技术,例如RPC。套接字(很可能是BSD套接字)就是这种技术的一个例子。因此,“套接字编程”是“网络编程”的子集。
是的,网络编程确实需要网络技术,而套接字编程是网络编程的一个子集。当前大多数网络编程都是直接使用套接字或在套接字顶部使用其他各种层来完成的。