采用TCP协议的C/S架构实现API详解

来源:互联网 发布:动画软件tvp怎么用 编辑:程序博客网 时间:2024/05/21 09:11

博客内容来源:网络、书籍和本人整理总结

socket():

socket()函数是一个可用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源的函数。

函数原型:socket(int af, int type, int protocol);

af:一个地址描述。目前只支持AF_INET格式,也就是ARPA Internet地址格式。

type:新套接口的类型描述。

SOCK_STREAM提供有序的、可靠的、双向的和基于连接的字节流,使用带外数据传送机制,为Internet地址族使用TCP。

SOCK_DGRAM支持无连接的、不可靠的和使用固定大小(通常很小)缓冲区的数据报服务,为Internet地址族使用UDP。

protocol:套接口所用的协议。如果调用者不想指定,可用0指定,表示缺省。

setsockpt():

setsockpt()函数,用于任意类型、任意状态套接口的设置选项值。

函数原型:int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);

sockfd:标识一个套接口的描述字。

level:选项定义的层次;支持SOL_SOCKET(通用套接字选项)、IPPROTO_TCP(TCP选项)、IPROTO_IP(IP选项)和IPPROTO_IPV6。

optname:需设置的选项。SO_REUSEADDR允许套接口和一个已在使用中的地址捆绑。

optval:指针,指向存放选项待设置的新值的缓冲区。

optlen:optval缓冲区长度。

作用:close(socket)(一般不会立即关闭而经历TIME_WAIT的过程)之后想继续重用该socket。

int opt = 1;相当于bool opt = true;即SO_REUSEADDR是允许的。

bind():

bind()函数将一本地地址与一套接口捆绑。

函数原型:int bind(int sockfd, const struct sockaddr* my_addr, socklen_t addrlen);

sockfd:表示已经建立的socket编号(描述符)。

my_addr:是一个指向sockaddr结构体类型的指针。

addrlen:my_addr结构的长度。

listen():

listen()函数表示让一个套接字处于监听到来的连接请求的状态。

函数原型:int listen(SOCKET sockfd, int backlog);

sockfd:一个已绑定未被连接的套接字描述符。

backlog:连接请求队列的最大长度(一般由2到4)。

accept():

accept()函数是在一个套接口接受一个连接。

函数原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd:套接字描述符,该套接口在listen()后监听连接。

addr:(可选)指针,指向一缓冲区,其中接收为通讯层所知的连接实体的地址。addr参数的实际格式由套接口创建时所产生的地址族确定。

addrlen:(可选)指针,输入参数,配合addr一起使用,指向存有addr地址长度的整型数。

inet_ntoa():

inet_ntoa()函数将一个十进制网络字节序转换为点分十进制IP格式的字符串。

函数原型:char*inet_ntoa(struct in_addr in);

in:一个网络上的IP地址。

pthread_create():

pthread_create()函数是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数。

函数原型:int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);

第一个参数为指向线程标识符的指针。

第二个参数用来设置线程属性。

第三个参数是线程运行函数的起始地址。

最后一个参数是运行函数的参数。

connect():

connect()函数用于建立与指定socket的连接。

函数原型: int connect(int s, const struct sockaddr * name, int namelen);

s:标识一个未连接socket。
name:指向要连接套接字的sockaddr结构体的指针。
namelen:sockaddr结构体的字节长度。

谢谢阅读!





1 0
原创粉丝点击