Socket 编程
标签(空格分隔): 计算机网络
前言
网络编程的世界里面,有各个层次的网络编程接口,这些接口给予我们针对不同的层次对网络进行操控,常见有下图这些层次的接口
使用哪个层次的接口可以对实际对那个层次进行控制。
而我们常用的应用编程 API 则是应用层和传输层之间的网络编程接口,通过这个系统调用 API 切换应用程序和操作系统的控制权
几种典型的应用编程接口:
Berkeley UNIX 操作系统定义的 API,称为套接字接口(Socket interface),简称套接字(socket)
windows 中采用了套接字接口 API,形成稍有不同的 API,并称为 winsock
Socket 概述
通信模型:客户/服务器(C/S)
socket 作为应用进程通信的一种抽象机制,他就像是一个客户端的插头插到了服务器对应的插座
我们知道,对外标识通信端点地址是 IP 地址 + 端口号, 那么操作系统和进程实际上是如何管理套接字的呢?实际上每当创建一个套接字的时候,操作系统会返回一个小整数作为描述符来标识这个套接字,而应用程序则使用这个描述符来引用该套接字
更进一步地说,Socket 其实也是类似文件的一种抽象,当应用进程创建套接字时,操作系统分配一个数据结构存储该套接字相关信息,并返回套接字描述符。另外在操作系统内部维护着一个 Socket 描述符表,根据套接字描述符可以引用 Socket 的一个数据结构,里面包含了两个端点通信需要的所有东西 通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。
Socket API 函数
针对使用 Windows 上的 winsock 进行网络应用编程的时候,我们一般要走这样的流程