套接字编程简介

IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in 命名。定义在<netiont/in.h>头文件中。如下图在这里插入图片描述
长度字段sin_len是为增加对OSI协议的支持而随4.3BSD-Reno添加的。正因为有了长度字段,才简化了长度可变套接字地址结构的处理。

以下类型都在头文件<sys/socket.h>中

sa_family_t 套接字地址结构的地址族
socklen_t 套接字地址结构的长度。一般为uint30_t

以下类型在头文件<netinet/in.h>中

in_addr_t IPV4地址,一般为uint32_t
in_port_t TCP或UDP端口,一般为uint16_t
IPV4地址和TCP或UDP端口号在套接字地址结构中总是以网络字节来存储。

不同套接字的地址比较

在这里插入图片描述
进程到内核传递套接字地址结构的函数有3个:bind, connect和sendto 。这些函数的一个参数是指向某个套接字地址结构的指针另一个参数是该结构的整数大小。
从内核到进程传递的套接字结构地址函数有4个: accept,recvfrom,getsockname,getpeername.这四个函数是指向某个套接字地址结构的指针和指向表示该结构大小的整数变量的指针
在这里插入图片描述

字节排序函数

内存中存储着两个字节有两种方法:一种将低序字节存储在起始地址,称为小端字节序,另一种方法是将高序字节存储在起始地址,着称为大端。
在这里插入图片描述

字节操纵函数

bzreo 把字节设为0的函数
在这里插入图片描述

inet_aton,inet_addr和inet_ntoa函数

inet_aton,inet_addr和inet_ntoa 在点十进制数串与它长度为32为位的网络字节二进制值间转换IPV4地址
inet_aton和inet_ntop对于IPV4地址和IPV6地址都适用

在这里插入图片描述
inet_addr函数还存在一个潜在问题,一些手册页面声明该函数出错时放回-1而不是INADDR_NONE. inet_ntoa该函数以一个结构而不是以指向该结构的一个指针作为其参数。

inet_pton和inet_ntop函数

在这里插入图片描述
地址函数转换
在这里插入图片描述

// ipv4地址转换函数
int inet_pton(int famliy,const char *strptr,void *addrptr)
{
   if(family==AF_INET)
   {
     struct in_addr in_val;
     if(inet_aton(strptr,&in_val))
     {
     memcpy(addrptr,&in_val,sizeof(struct in_adder));
     return (1);
     }
     return (0);
   }
   errno =EAFNOSUPPORT;
   return -1;
}

inet_ntop 函数实现
在这里插入图片描述

sock_ntop和相关函数

在这里插入图片描述

readn,writen和readline函数

字节流套接字上调用read或write输入或输出的字节数可能比请求少,原因在于内核中用户套接字的缓冲区可能以达到极限。
在这里插入图片描述
为什么诸如套接字地址结构的长度之类的值-结果参数要用指针来传递?
C中函数不能改变按值传递的参数的值,要让被调用的函数修改由调用者传入的某个值,调用者必须传递指向这个待修改值的一个指针

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值