网络编程相关

来源:互联网 发布:传世登录器源码 编辑:程序博客网 时间:2024/04/29 15:36
[cpp] view plain copy
  1. WINSOCK_API_LINKAGE  
  2. SOCKET  
  3. WSAAPI  
  4. accept(  
  5.     SOCKET s,  
  6.     struct sockaddr FAR * addr,  
  7.     int FAR * addrlen  
  8.     );  

        accept()函数的第一个参数用来标识服务端套接字(也就是listen函数中设置为监听状态的套接字),第二个参数是用来保存客户端套接字对应的“地方”(包括客户端IP和端口信息等), 第三个参数是“地方”的占地大小。返回值对应客户端套接字标识。

        实际上是这样的: accept函数指定服务端去接受客户端的连接,接收后,返回了客户端套接字的标识,且获得了客户端套接字的“地方”(包括客户端IP和端口信息等)。

        accept函数(是阻塞函数)非常地痴情,痴心不改:如果没有客户端套接字去请求,它便会在那里一直痴痴地等下去,直到永远。





inet_pton跟inet_ntop这两个函数是随IPv6出现的函数,对于IPv4地址和IPv6地址都适用,函数中p和n分别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构的二进制值。

[cpp] view plain copy
  1. #include <arpe/inet.h>  
  2. int inet_pton(int family, const char *strptr, void *addrptr);     //将点分十进制的ip地址转化为用于网络传输的数值格式  
  3.         返回值:若成功则为1,若输入不是有效的表达式则为0,若出错则为-1  
  4.   
  5. const char * inet_ntop(int family, const void *addrptr, char *strptr, size_t len);     //将数值格式转化为点分十进制的ip地址格式  
  6.         返回值:若成功则为指向结构的指针,若出错则为NULL  



htons  跟htonl

(1)这两个函数的family参数既可以是AF_INET(ipv4)也可以是AF_INET6(ipv6)。如果,以不被支持的地址族作为family参数,这两个函数都返回一个错误,并将errno置为EAFNOSUPPORT.

(2)第一个函数尝试转换由strptr指针所指向的字符串,并通过addrptr指针存放二进制结果,若成功则返回值为1,否则如果所指定的family而言输入字符串不是有效的表达式格式,那么返回值为0.

(3)inet_ntop进行相反的转换,从数值格式(addrptr)转换到表达式(strptr)。inet_ntop函数的strptr参数不可以是一个空指针。调用者必须为目标存储单元分配内存并指定其大小,调用成功时,这个指针就是该函数的返回值。len参数是目标存储单元的大小,以免该函数溢出其调用者的缓冲区。如果len太小,不足以容纳表达式结果,那么返回一个空指针,并置为errno为ENOSPC。

[cpp] view plain copy
  1. inet_pton(AF_INET, ip, &foo.sin_addr);   //  代替 foo.sin_addr.addr=inet_addr(ip);  
  2.   
  3.   
  4. char str[INET_ADDRSTRLEN];  
  5. char *ptr = inet_ntop(AF_INET,&foo.sin_addr, str, sizeof(str));      // 代替 ptr = inet_ntoa(foo.sin_addr)  

    我开始的时候认为htons和htonl可以只用htonl代替但是后来发现这个是错误,会导致服务器端和客户端连接不上。

    下面就让我们看看他们:

    htons  (host to net short)

    #include <arpa/inet.h> 
    uint16_t htons(uint16_t hostshort); 
    htons的功能:
                            将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)  参数u_short hostshort: 16位无符号整数 返回值:
                   TCP / IP网络字节顺序.
    htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。
    举个例子:
                    假定你的port是  0x1234,  在网络字节序里 这个port放到内存中就应该显示成  addr addr+1  0x12 0x34  而在x86电脑上,0x1234放到内存中实际是:  addr addr+1  0x34 0x12 htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。


    htonl()   (host to net long)

      简述:  将主机的无符号长整形数转换成网络字节顺序。 
     #include <arpa/inet.h>  
    uint32_t htonl(uint32_t hostlong);  
    hostlong:主机字节顺序表达的32位数。  
    注释:
        本函数将一个32位数从主机字节顺序转换成网络字节顺序。  
    返回值: 
           htonl()返回一个网络字节顺序的值。   

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 炒小青菜的做法窍门 素炒小青菜的做法大全 小青菜种植技术 小青菜种植方法和时间 炒小青菜的家常做法 小青菜的营养价值 小青菜的功效与作用 小青菜怎么做 小青菜怎么做好吃 小青菜怎么炒 小青菜的做法 小青虫 女生晚上梦见小青蛇什么预兆 国产小青蛙全集 快乐小青蛙歌曲 国产小青蛙app 小青蛙的故事 小青蛙故事 国产小青蛙第4部43分钟 小青蛙91第一部在线播放 91国产小青蛙真实录 小青蛙全集 国产小青蛙第4部 国产小青蛙第5部女主真实人物 国产小青蛙第二季 国产小青蛙第三部 一只小青蛙 小青蛙儿歌歌词 小青蛙歌曲 小青蛙歌词 小青蛙手工 池塘里的小青蛙 小青蛙回家 小青蛙你唱吧 折小青蛙 制作小青蛙 青蛙儿歌 小青蛙课文 可爱的小青蛙 井底的小青蛙 小青蛙教案