《TCP/IP网络编程》第2章 套接字类型与协议设置
套接字协议及其数据传输特性
1. 关于协议(Protocol)
计算机间对话必备通信规则。
2. 创建套接字
#include <sys/socket>
int socket(int domain, int type, int protocol);
-domain:套接字中使用的协议族(ProtocolFamily)信息;
-type:套接字数据传输类型信息;
-protocol:计算机间通信中使用的协议信息;
3. 协议族(Protocol Family)
- PF_INET ipv4
- PF_INET6 ipv6
- PF_LOCAL 本地通信的UNIX协议族
4. 套接字类型(Type)
套接字类型指的是套接字的数据传输方式。Socket函数第一个参数PF_INET协议族中也存在多种数据传输方式。
套接字类型1:面向连接的套接字(SOCK_STREAM)
- 传输过程中数据不会消失;
- 按序传输数据;
- 传输的数据不存在数据边界(Boundary)。
收发数据的套接字内部有缓冲(buffer),即字节数组。通过套接字传输的数据将保存到该数组,因此,收到数据并不意味着马上调用read函数,只要不超过数组容量,则有可能在数据填充满后通过1次函数调用读取全部数据,也有可能分成多次read函数调用读取。
读取速度较慢时,缓冲有可能被填满,此时套接字无法再接收数据,但即使这样也不会发生数据丢失,因为传输端套接字将停止传输。
面向连接的套接字:可靠的、按序传递的、基于字节的面向连接的数据传输方式。
套接字类型2:面向消息的套接字(SOCK_DGRAM)
面向消息的套接字比面向连接的套接字具有更快的传输速度,但无法避免数据丢失或损毁;另外,每次传输的数据大小具有一定的限制,并存在数据边界,存在数据边界意味着接收数据的次数应和传输次数相同。
面向消息的套接字:不可靠的、不按序传递的、以数据的高速传输为目的的套接字。
5. 协议的最终选择
传递前两个参数即可创建所需套接字,所以大部分情况下可以向第三个采纳数传递0,除非遇到以下这种情况:
“同一协议族中存在多个数据传输方式相同的协议”(传输方式相同,但协议不同)
int tcp_socket = socket(PF_INET, SOCK_STREAM,IPPROTO_TCP);
int udp_socket = socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP);
上一篇: jdbc查询返回来的List
下一篇: GBase8s数据库FETCH 语句