intsocket(intdomain,int type,int protocol );
功能:创建套接字,
返回值:成功:向新创建的套接字返回文件描述符,失败:-1,设置错误
参数:
域名:
AF_INET这是用于生成套接字的大多数协议,通过TCP或UDP传输,并使用IPv4地址
AF_INET6与上述类似,只是来使用IPv6的地址
AF_Unix本地协议用于UNIX和Linux系统,当客户端和服务器位于同一台和其上时使用
类型:
SOCK_STREAM协议是基于序列、可靠且数据完整的字节流的连接。 这是使用最多的套接字类型,使用TCP进行传输。
名为SOCK_DGRAM的协议是未连接的固定长度的传输呼叫。 这个协议不可靠。 使用UDP连接。
SOCK_SEQPACKET该协议通过两条线路的可靠连接发送和传输固定长度的数据包。 如果不完全接受这个包的话就不能读取。
SOCK_RAW socket类型提供使用ICMP公共协议的单个网络访问。 (ping,traceroute使用此协议)
SOCK_RDM这种类型很少使用,大多数操作系统都没有实现,而是提供给数据链路层使用,包的顺序没有保证
协议:
如果传递0,将使用默认协议。
intbind(intsockfd,const struct sockaddr *addr,socklen_t addrlen );
功能:绑定固定的网络地址和端口号
返回值:正常返回0,失败后返回-1,设置errno
参数:
sockfd :
套接字文件描述符
addr:
构建IP地址和端口号
addrlen:
大小(addr )的长度
struct sockaddr *是一种通用指针类型,addr参数实际上可以接受多个协议的sockaddr结构,每个结构的长度都不一样,因此第三个参数addrlen必须指定结构的长度
注意:绑定Ip和端口新的结构体定义是struct sockaddr_in类型,所以传参数时要注意强转;
struct sockaddr_in servaddr;
bzero(servaddr,sizeof ) (servaddr );
servaddr.sin_family=AF_INET;
servaddr.sin _ addr.s _ addr=htonl (in addr _ any );
Servaddr.sin_port=htons(6666;
intlisten(intsockfd,int backlog );
功能:可以监听多少呼叫方并开始连接? 如果大于backlog,则将其忽略,下次继续监听。注意:这不是限制客户端最大连接数
成功回到0,失败回到-1
参数:
sockfd:
套接字文件描述符
backlog:
为了制作3次握手队列而排队的列、和刚制作3次握手队列的链接数
intaccept(intsockfd,struct sockaddr *addr,socklen_t *addrlen );
功能:等待与客户端的连接请求,连接成功后返回新fd和客户端的通信返回值。 成功返回用于与客户端通信的新套接字文件描述符。 失败后返回-1。 设定错误
客户端所需的函数:
intconnect(intsockfd,const struct sockaddr *addr,socklen_t addrlen );
功能:客户端必须通过调用connect ()连接到服务器。 c onnect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址
返回值: connect ()成功返回0,错误返回-1。
参数:
sockdf:
套接字文件描述符
addr:
指定服务器端地址信息,包括传入参数、IP地址和端口号
addrlen:
传递参数,并将大小传递给sizeof(addr )