在使用TCPI/IP协议时,可选的套接口类型有三种:流式套接口、数据报套接口、原始套接口三种。
流式套接口 定义了一种可靠的面向连接的服务,实现了无差错、无重复的顺序数据传输;对于建立在这种类型套接口上的套接字,数据是可双向传输的字节流,无长度限制。
数据报套接口 定义了一种无连接的服务,一个建立在数据报套接口上的套接字锁了接收的信息有可能重复,或者和发出时间的顺序不同。
原始套接口 允许对底层协议 像IP、ICMP直接诶访问,主要用于新网络协议实现测试。
套接口是由操作系统提供的、处于OSI七成模型传输层和会话层之间的网络编程调用接口,抽象的概念,也称“套接字”
① 面向连接的协议套接口 (客户、服务器模式的网络应用程序通常使用面向连接的协议)采用面向连接的协议(TCP)时,服务器处理的请求比较复杂,要经过反复的交互。大多数TCP服务器是并发服务器,调用流程如下:
服务器端--->调用socket(),建立流式套接字s--->调用bind()将套接字s与本地地址、端口绑定--->调用listen()通知底层协议(TCP),服务器已经准备好接受数据--->调用accept(),准备接受客户端的连接--->连接建立,accept()调用返回得到的套接字ns--->调用recv()/send()在套接字ns上读写数据,直到数据交换完成--->调用closesocket()关闭数据套接字ns--->调用closesocket关闭监听套接字s,停止服务
客户端--->调用socket,建立流式套接字c--->调用connect(),使套接字c与远程主机建立连接--->调用send()/recv(),在套接字c上读写数据,直到数据交换完成--->调用closesocket,关闭套接字c,结束此次连接会话
②无连接的协议套接口调用(采用无连接协议(例如:UDP)时,服务器一般都是面向事务处理的),一个请求一个应答就完成了客户与服务程序之间的作用
使用无连接的协议,调用了流程:
服务器端--->调用socket,建立数据报套接字s--->调用bind,将套接字s与本地的地址、端口等绑定--->调用recvfrom/sendto,通过套接字s读写数据,进行数据处理--->调用closesocket,关闭套接字是,停止服务
客户端--->调用socket建立数据报套接字c--->调用sendto/recvfrom通过套接字c读写数据--->调用closesocket,关闭套接字c,结束会话