函数
创建套接字:
#include<sys/scoket.h>
@param domain:套接字中使用的协议族(Protocol Family)信息
@param type:套接字数据传输类型信息
@param protocol:计算机简介通信中使用的协议信息
int socket(int domain,int type,int protocol);
//成功返回文件描述符,失败返回-1
socket从Linux内核版本2.6.17起,type参数可以接收服务类型与下面两重要标志相与的值:
SOCK_NONBLOCK:创建socket设为非阻塞
SOCK_CLOEXEC:fork调用创建子进程时在子进程中关闭该socket
domain协议族:
domain值 | 协议族 |
---|
PF_INET | IPv4互联网协议族 |
PF_INET6 | IPv6互联网协议族 |
PF_LOCAL | 本地通信的UNIX协议族 |
PF_PACKET | 底层套接字的协议族 |
PF_IPX | IPX NoveII协议族 |
type套接字类型:
type值 | 套接字类型 |
---|
SOCK_STREAM | 面向连接的套接字 |
SOCK_DGRAM | 面向消息的套接字 |
套接字特征:
面向连接的套接字:
传输过程中数据不会小说
按序传输数据
传输的数据不存在数据边界
面向消息的套接字:
强调快速传输而非传输顺序
传输的数据可能丢失也可能损坏
传输的数据有数据边界
限制每次传输的数据大小
数据边界:接收次数与传输次数是否相同 存在数据边界:次数应当相同
protocol指定协议信息
protocol值 | 协议类型 |
---|
IPPROTO_TCP | TCP套接字 |
IPPROTO_UDP | UDP套接字 |
创建套接字
int tcp_socket=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
//TCP套接字
int udp_socket=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
//UDP套接字
实例