socket地址API

socket
1.主机字节序和网络字节序
背景:现代CPU的累加器一次都能装载(至少)4字节(32位机器)。这4字节在**内存中排列的顺序**将影响到它被累加器装载成整数的值。
小知识:字节序分为大端字节序和小端字节序。
1.1big endian:一个整数的高位字节(23-31bit)存储在内存的低地址处,低位字节(0-7bit)存储在内存的高地址处。
1.2little endian:整数的高位字节存储在内存的高地址处,而低位字节储存在内存的低地址处
代码如下:

void byteorder(){
union{
short value;
char union_bytes [sizeof( short )];

} test;
test.value = 0x0102;
if( (test.union_bytes[0] == 1)&&(test.union_bytes[1] == 2)){
printf("big endian");
}else if( (test.union_bytes[0] == 2)&&(test.union_bytes[1] == 1)){
printf("ittle ");
}else{
printf("unknown");}
}

1.3现代PC大多采用小段字节序,所以小端字节序又称为主机字节序。
2.当格式化的数据(32bit or 16bit)在两台不同字节序的主机之间传递就会出现问题
2.1解决方案:发送端总是把要发送的数据转化为大端字节序在发送,接收端知道数据总是大端字节序,所以接收端可以根据自身的情况来决定是否转换(小段转换,大端字节序不转换)
3.大端字节序又被称为网络字节序
4.进程字节问题:同一台机器上的两个进程,一个是C语言,一个是JAVA语言编写,也要考虑字节序的问题(JAVA虚拟机普遍使用大端字节序)
5.linux转换大小端字节序的函数(4个)
5.1 unsigned long int htonl(unsigned long int hostlong);
5.2 unsigned short int htons(unsigned short int hostshort);
5.3 unsigned long int ntohl(unsigned long int netlong);
5.4 unsigned short int ntohs(unsigned short int netshort);

5.5上述四个含义比较明确:htonl表示host to network long
即将长整数型(32bit)的主机字节序转换为网络字节序数据。
5.6长整型函数通常用来转换IP地址,短整型常用来转换端口号(不限于此,所有的格式化的数据通过网络传输时,都应该使用这些函数来转换字节序)

原文地址:http://blog.51cto.com/10725691/2067405

时间: 2024-10-17 02:28:25

socket地址API的相关文章

Linux网络编程-----Socket地址API

(1) 通用socket地址 socket网络编程接口中表示socket地址的是结构体sockaddr,其定义如下: #include<bits/socket.h> struct sockaddr { sa_family_t sa_family; char sa_data[14]; } (2)新的通用socket地址结构体 #include<bits/socket.h> struct sockaddr_storage { sa_family_t sa_family; unsigne

网络编程socket基本API详解(转)

网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件. socket 类型 常见的socket有3种类

SOCKET 地址

地址格式: 函数bind和getsockname使用通用数据类型:struct sockaddr*来指向socket地址. #incude <sys/socket.h> struct sockaddr { short int sa_family, char sa_data[14] } sa_family 指的是地址格式, sa_data[14] 则是真正的地址内容.地址数据和格式挂钩的,什么样的格式对应什么样的内容.长度也依赖于格式,所以有可能大于14个字节.这里给出的14是任意的.... 以

linux 高性能读书笔记之通用socket地址

####socket网络编程接口socket的地址是结构体sockaddr代码如下struct sockaddr{sa_family_t sa_family;char sa_data[14];}sa_family 成员是地址族类型(sa_family_t)变量.地址族类型通常与协议族类型对应1.二者对应表 协议族 地址表 描述 PF_UNIX AF_UNIX UNIX本地域协议族 PF_INET AF_INET TCP/IPv4协议族 PF_INET6 AF_INET6 TCP/IPv6协议族

关于SOCKET地址结构的地址转换

SOCKET地址结构的结构体是sockaddr_in,其中的sin_addr是关于SOCKET的地址的,sin_addr的子结构s_addr是IP地址有关的,是一个字,即0x123AAAAA类似的形式的变量.用inet_addr("192.168.1.1")的方式可以将IP地址转化为该形式.IP地址是4个字节组成的,即4个0-255的数字组成的,存储的时候逆序储存.用inet_ntoa()可以将一个0x123AAAAA形式的变量转为一个数组,其前4位是IP地址的各个位数,该函数的返回值

Socket.IO API Socket

Socket Socket类继承自EventEmitter.覆写了emit方法,保留了EventEmitter的其他方法 socket.id 会话的唯一标识符,来自于底层的Client socket.rooms 标识此客户端所在房间的字符串哈希值,按房间名称编制索引 socket.client 对底层Client对象的引用. socket.conn 对底层Client传输连接的引用(engine.io Socket对象) socket.request 一个getter代理,它返回对request

Java socket编程API基础

Socket是Java网络编程的基础,深入学习socket对于了解tcp/ip网络通信协议很有帮助, 此文讲解Socket的基础编程.Socket用在哪里:①.主要用在进程间,②.网络间通信. 文章目录如下: 一.Socket通信基本示例 二.消息通信优化 2.1 双向通信,发送消息并接受消息 2.2 使用场景 2.3 如何告知对方已发送完命令 2.3.1 通过Socket关闭 2.3.2 通过Socket关闭输出流的方式 2.3.3 通过约定符号 2.3.4 通过指定长度 三.服务端优化 3.

【转】网络编程socket基本API详解

转自:http://www.cnblogs.com/luxiaoxun/archive/2012/10/16/2725760.html socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入

智能识别快递地址api接口实现(PHP示例)

电商.ERP等行业发货时,批量录入图片上的收件人地址是个难题:智能识别收件人API是近乎完美的解决方案,通过识别图片,解析出图片中收件人的姓名.电话.详细地址(省.市.区/县.详细地址).将此接口集成到下单环节,可极大的提高了发货效率. 一.使用场景 场景1:客户微信(或QQ.钉钉等)截图收件人信息及地址 场景2:快递单上面的收件人信息及地址 场景3:手写收件人信息及地址 二.智能识别收件人服务使用流程 1.注册快宝开放平台,获取开发者账号,并认证资质:http://open.kuaidihel