前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UNPv13:#第3章#套接字编程简介

UNPv13:#第3章#套接字编程简介

作者头像
_gongluck
发布2018-03-09 14:18:10
7400
发布2018-03-09 14:18:10
举报

IPv4套接字地址结构

POSIX规范只要求3个字段:sin_family、sin_addr和sin_port。

代码语言:javascript
复制
#include <netinet/in.h>  

struct sockaddr_in  
{  
    uint8_t         sin_len;  
    sa_family_t     sin_family;  
    in_port_t       sin_port;  
    struct in_addr  sin_addr;  
    ...  
}; 

通用套接字地址结构

代码语言:javascript
复制
#include <sys/socket.h>

struct sockaddr
{
    uint8_t      sa_len;
    sa_family_t  sa_family;
    char         sa_data[14];
};

字节排序程序

术语“小端”和“大端”表示多个字节值的哪一端存储在该值的起始地址。网际协议使用大端字节序来传送这些多字节整数。

代码语言:javascript
复制
#include <netinet/in.h>

uint16_t htons(uint16_t host16bitvalue);  
uint32_t htonl(uint32_t host32bitvalue);  
uint16_t ntohs(uint16_t net16bitvalue);  
uint32_t ntohl(uint32_t net32bitvalue); 

在那些与网际协议所用的大端字节序相同的系统中,这四个函数通常被定义为空宏。

inet_aton、inet_addr和inet_ntoa函数

代码语言:javascript
复制
#include <arpa/inet.h>  

int inet_aton(const char* strptr, struct in_addr* addrptr);//字符串有效返回1,否则为0
in_addr_t inet_addr(const char* strptr);//字符串有效返回网络字节序的32位IPv4地址,否则为INADDR_NONE
char* inet_ntoa(struct in_addr inaddr);//指向一个点分十进制数串的指针

inet_pton和inet_ntop函数

代码语言:javascript
复制
#include <arpa/inet.h> 

int inet_pton(int family, const char* strptr, void* addrptr);//成功:1;输入格式无效:0;出错:-1
const char* inet_ntop(int family, const void* addrptr, char* strptr, size_t len);//失败:NULL;成功:结果
代码语言:javascript
复制
#include <netinet.in.h>

#define INET_ADDRSTRLEN 16

注意

字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,原因在于套接字的缓冲器可能已经达到了极限,需要再次调用read或write输入或输出剩余的字节。对于文本行交互的应用来说,程序应该按照操作缓冲区来编写。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IPv4套接字地址结构
  • 通用套接字地址结构
  • 字节排序程序
  • inet_aton、inet_addr和inet_ntoa函数
  • inet_pton和inet_ntop函数
  • 注意
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档