您的位置:首页 > 理论基础 > 计算机网络

UNIX环境高级编程——网络编程常用函数及结构

2013-07-19 14:32 351 查看
IP地址的转换#include <arpa/inet.h> 
int inet_aton(const char *strptr,                    struct in_addr *addrptr);//将strptr字符串转换成32位的网络字节序(二进制值--a.b.c.d->32)。int_addr_t inet_addr(const char *strptr)//功能通上,返回地址。in_addr addr;addr.s_addr = inet_addr("192.168.2.103");
char *inet_ntoa(stuct in_addr inaddr);//32位IP->a.b.c.d形式的//将32位网络字节序二进制地址转换成点分十进制的串a代表ASCII,n代表network。网络、主机字节序转换函数主机序转换到网络序:u_short htons (u_short short);u_long htonl (u_long  hostlong);网络序转换到主机序:u_short ntohs (u_short short);u_long ntohl (u_long hostlong);h(host),n(network),l(long),s(short)通过主机名访问网络主机结构体
struct hostent{    char *h_name;//主机的正式名称    char *h_aliases;//主机的别名    int  h_addrtype;//主机的地址类型 AF_INET    int h_length;//主机的地址长度    char **h_addr_list;//主机的IP地址列表}#define h_addr h_addr_list[0] //主机的第一个IP地址struct hostent *gethostbyname(const char *hostname)socket通用地址结构:struct sockaddr{    u_short sa_family;//协议族    char sa_data[14];//地址协议}Internet协议地址结构struct sockaddr_in{    short int sin_family;//协议族    unsigned short int  sin_port;//端口号    struct in_addr sin_addr;//协议特定地址    unsigned char si_zero[8];//未使用,填0}一般使用与sockaddr等价的sockaddr_in数据结构IPv4地址结构struct in_addr{    u_long s_addr;}创建一个socketint socket(int domain,    //协议族                  int type,    //套接字类型                  int protocol)    //标识位头文件:#include <sys/types.h>#include <sys/socket.h>参数的选项:domainAF_INET//internet协议AF_UNIX//unix internal协议AF_NS//Xerox NS协议AF_IMPLINK//Interface Message协议typeSOCK_STREAM//流式socketSOCK_DGRAM//数据报socketSOCK_RAW//raw socketprotocol参数通常设置为0返回值:成功返回socket的描述符,失败返回-1.                          


用于绑定IP地址和端口号到socketint bind(int sockfd,    //由socket调用返回的文件描述符。              struct sockaddr *my_addr,    //指向sockaddr_in结构的指针,包含server IP的地址和端口号。              int addrlen);    //sockaddr结构的长度(sizeof(sockaddr_in))。返回值:成功0,失败-1;                    


设置服务器能处理的最大连接要求 
#include <sys/socket.h>int listen(int sockfd,    //监听连接的socket。             int bakclog)    //请求排队的最大长度。listen()将bind的文件描述符变为监听套接字返回值:文件描述符或-1;
                             


等待客户端的socket连接请求 
int accept (int sockfd,    //listen后的文件描述符,接收客户端连接的Socket。                   struct sockaddr *addr,    //接收外来连接的地址信息。(若不需要可设置NULL)                   socklen_t *addrlen);    //addr结构的长度。返回值:成功:新连接的Socket,(并使用其与客户进行通讯,原Socket继续接受其它客户的连接)。失败:-1与服务器建立连接int connect(int sockfd,    //socket返回的文件描述符                     struct sockaddr *serv_addr,    // 服务器端的连接信息,.sin_add是服务端地址                     int addrlen)    //serv_addr的长度头文件:#include <sys/types.h>#include <sys/socket.h>返回值:0或-1;                           


关闭双向通道int close (int sockfd);
int shutdown(int sockfd,                         int howto)    //SHUT_RD关闭读终端,SHUT_WR关闭写终端。返回值:成功:0失败:-1接收、发送数据(TCP)
ssize_t recv(int socket, void *buffer, size_t length, int flages);//接收数据 ssize_t send(int socket, const void *buffer, size_t length, int flags)//发送数据头文件:#incldue <sys/socket.h>参数:socket: 已经连接的Socket。buffer: 指向用于接收数据的缓冲区的指针。length: 缓冲区的大小(字节)。flags: MSG_OOB或0(send()还有etc).返回值:成功接收或发送的字节数。失败返回-1,并设置errno。recv返回0,连接断开。                        


接收、发送数据(UDP)头文件:#include < sys/types.h >   #include < sys/socket.h >接收远程主机经指定的socket传来的数据(接收) ssize_t recvfrom(int sockfd,    //套接字描述符                        void *buf,    //缓冲区                        int len,    //可接收数据的最大长度.                        unsigned int flags,    //一般设0,                        struct sockaddr *from,    //指定欲传送的网络地址                        socket_t *fromlen);    //结构长度ssize_t 相当于 int,socket_t 相当于int 。返回值:成功则返回接收到的字符数,失败返回-1. 将数据由指定的socket传给对方主机(发送)int sendto ( int s ,     //已建好连线的socket,如果利用UDP协议则不需经过连线操作                const void * msg,     //发送缓冲区                int len,     // 发送的数据大小                unsigned int flags,     //一般设0                const  struct sockaddr * to ,     //指定欲传送的网络地址                int tolen )     //sockaddr的结果长度返回值成功则返回实际传送出去的字符数,失败返回-1,并设置errno 。使用文件描述符的函数处理套接字时的行为                             
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: