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

IPv4套接字地址结构

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

#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;  
    ...  
}; 

通用套接字地址结构

#include <sys/socket.h>

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

字节排序程序

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

#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函数

#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函数

#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;成功:结果
#include <netinet.in.h>

#define INET_ADDRSTRLEN 16

注意

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大前端_Web

NodeJS学习三之API

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

893
来自专栏我是业余自学C/C++的

汇编语言-第二章 寄存器(CPU工作原理)

1142
来自专栏Fish

android文件存储

为了输出数据,要把list中存储的写到一个txt文件里,就顺手学了一下 文件存储的方法,说是学,其实又是百度之后复制粘贴。不过学到了一个关于java中的一个知识...

1989
来自专栏JMCui

Redis学习一(基础入门).

一、前言     Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、key-Value 的数据库、并提供多...

3665
来自专栏九彩拼盘的叨叨叨

ES6 之 Proxy 介绍

Proxy(代理) 是 ES6 中新增的一个特性。Proxy 让我们能够以简洁易懂的方式控制外部对对象的访问。其功能非常类似于设计模式中的代理模式。

883
来自专栏吴伟祥

Jmockdata随机模拟 Java 数据插件

     Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。

642
来自专栏用户2442861的专栏

STL源码剖析-set容器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

1073
来自专栏我的博客

坑爹的BOM

场景:开发小程序使用wx.request请求数据时提示Cannot read property of ‘xxxx’ undefined…….. ...

30210
来自专栏用户2442861的专栏

python操作redis简单例子

#2、配置  配置一下吧,默认配置文件在: “/etc/redis/redis.conf”  绑定ip:  “bind 127.0.0.1″ -> “b...

472
来自专栏大内老A

.NET Core的文件系统[3]:由PhysicalFileProvider构建的物理文件系统

ASP.NET Core应用中使用得最多的还是具体的物理文件,比如配置文件、View文件以及网页上的静态文件,物理文件系统的抽象通过PhysicalFilePr...

1939

扫码关注云+社区