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 条评论
登录 后参与评论

相关文章

来自专栏小勇DW3

自己手动写代码实现数据库连接池

池:一个高级的集合体(集合存储元素 + 管理方式–>提高效率),是对外提供同一种类型对象的集合,如(线程池、数据库连接池)  特性:复用性(每条连接可重复使用)...

1213
来自专栏你不就像风一样

用Java执行Python:Jython踩坑笔记

1.通过Jython.jar提供的类库实现 2.通过Runtime.getRuntime()开启进程来执行脚本文件

3904
来自专栏闻道于事

JavaWeb(七)Cookie,EL表达式,标准标签库

Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件。Cookie是以键值对形式存储在客...

3256
来自专栏陈树义

简单笔记

1、类的表面类型和实际类型 实例对象有两个类型:表面类型(Apparent Type)和实际类型(ActualType),表面类型是声明时的类型,实际类型是对象...

2495
来自专栏Danny的专栏

【SpringDataJPA】——SpringDataJPA入门实例

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

1022
来自专栏大内老A

ASP.NET Core中的依赖注入(2):依赖注入(DI)

IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用“好莱坞原则”是应用程序以被动的方式实现对流程的定制。...

2108
来自专栏好好学java的技术栈

并发基础篇(二):Thread类的API总结

1104
来自专栏10km的专栏

java:学习commons-configuration2读取配置文件xml,properties

commons-configuration是apache为java应用程序提供的一个通用的配置文件管理接口,可以支持多种配置文件格式: Properties ...

3075
来自专栏李家的小酒馆

数据库JDBC的基本内容

JDBC 基本流程 首先向项目中导入jar包 创建如下代码 Class.forName("com.mysql.jdbc.Driv...

1770
来自专栏移动开发

WebView进行post请求

大多数情况下我们一般用WebView去加载一个界面就行了,但是有时候你想要进行post请求,比如你抓取到提交参数,想模拟一些pc端浏览器的请求,比如12306火...

2043

扫码关注云+社区