当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 网络编程常用函数接口

网络编程常用函数接口 时间:2014-10-21      来源:未知

通用结构体:

struct sockaddr {
           sa_family_t sa_family; /* unsigned short , 指定了通信协议家族 */
        char sa_data[14];
        };

IPV4网络通信地址结构体:

struct sockaddr_in {
                pa_family_t sin_family;
                port_t sin_port;
                struct in_addr {
                        unsigned int s_addr;
                }sin_addr;
        };

UNIX本地通信地址结构体:

struct sockaddr_un {
                sa_family_t sun_family;
                char sun_path[108];
        };

函数名:int socket (int domain, int type, int protocl)

功能:打开一个套接字,并返回一个相关的文件描述符。

返回值:成功,一个新的文件描述符;失败, -1;

参数表:

int domain, 通信域:
        AF_INET | AF_INET6 | AF_UNIX | AF_PACKET
        int type, 套接字类型:
                SOCK_STREAM 流式套接字
                SOCK_DGRAM 数据报套接字
                SOCK_RAW 原始套接字
        int protocl, 协议(在原始套接字中根据需要选择使用,流式或数据报套接字中为 0)

函数名: int bind(int sockfd, const struct sockaddr * addr, socklen_t addrlen);

功能:为一个打开的套接字,绑定一个地址(IP+PORT)。

返回值:成功, 0;失败, -1;

参数表:

int sockfd, 通过socket打开并返回的文件描述符。
        const struct sockaddr * addr, 通用结构体地址,具体根据通信域选择相关的地址格式。
        socklen_t addrlen, 实际地址结构体的大小。

函数名: int sendto(int sockfd, void *buff, size_t size, int flag, const struct sockaddr *addr, socklen_t addrlen);

功能:向一个指定的目标主机发送数据包。

返回值:成功,实际发送的字节数;失败, -1;

参数表:

int sockfd, 通过socket打开并返回的文件描述符。
        void *bufff, 即将发送的数据。
        size_t size,数据大小。
        int flag, 发送标志位(阻塞、非阻塞等,如果无特殊要求则设置为0)。
        const struct sockaddr * addr, 目标主机的地址结构体(IP+PORT)。
        socklen_t addrlen, 目标主机地址结构体大小。

函数名: int recvfrom(int sockfd, void *buff, size_t size, int flag, struct sockaddr *addr, socklen_t *addrlen);

功能:接受一个数据包,并带回数据包的来源地址。

返回值:成功,实际接收的字节数;失败, -1;对方关闭, 0;

参数表:

int sockfd, 通过socket打开并返回的文件描述符。
        void *bufff, 接受数据的缓冲区。
        size_t size,缓冲区大小。
        int flag, 接收标志位(阻塞、非阻塞等,如果无特殊要求则设置为0)。
        struct sockaddr * addr, 用来保存数据源主机的地址的结构体(IP+PORT)。
        socklen_t *addrlen, 期望接收的数据源主机的地址结构体大小(在使用前由用户自己初始化);一旦该函数调用结束,该变量会被修改为实际大小。

函数名: int listen(int sockfd, int backlog);

功能:将一个经过bind的套接字置为被动状态,以便将来使用accept接受新的请求。

返回值:成功, 0;失败, -1;

参数表:

int sockfd, 通过socket创建,并通过bind后的套接字描述符。
        int backlog, 握手请求队列的大值。

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

功能:接受一个握手请求,并返回一个新的文件描述符。

返回值:成功,新的文件描述符(用来收发数据的通道);失败, -1;

参数表:

int sockfd, 经过socket创建,bind后并且listen后的文件描述符。
        struct sockaddr *addr, 用来带回握手请求方的地址结构体。
        socklen_t addrlen, 期望接收的对方的地址大小,该值会被修改为实际大小,调用者需提前初始化。

函数名: int select(int nfds, fd_set *rdfds, fd_set *wrfds, fd_set *exceptfds, struct timeval * timval);

功能:在多路IO复用模型中,负责检测多个文件描述符资源。但没有资源可操作时,进程阻塞;有资源操作时返回可操作的资源个数。

返回值:成功,资源个数;失败, -1;超时, 0;

参数表:

int nfds, 检测的大描述符值+1.
        fd_set *rdfds, 希望监测的读资源描述符集合。
        fd_set *wrfds, 希望监测的写资源描述符集合。
        fd_set *wrfds, 希望监测的其他资源描述符集合。
        struct timeval *timval, 超时监测,设定秒+微秒。

select相关函数:

FD_SET(int fd, fd_set * fds): 将描述加入集合中。
        FD_CLR(int fd, fd_set *fds): 将指定描述从集合中移除。
        FD_ZERO(fd_set *fds): 清空一个描述符集合。
        FD_ISSET(Iint fd, fd_set *fds): 测试一个描述符是否在集合中(测试该描述符资源是否可操作);

其他函数接口:

int send(int sockfd, const void *buff, size_t size, int flag);
        int recv(int sockfd, void *buff, size_t size, int flag);
        getpeername(int connfd, struct sockaddr *addr, socklen_t *addrlen);
        getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
        setsockopt(int level, int optname, const void *optval, socklen_t optlen);
        short htons(short );
        int htonl(int);
        short ntohs(short);
        int ntohl(int);

上一篇:java中的匿名内部类总结

下一篇:野指针和空指针的两个小点

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部