????????"Socket"(套接字)是计算机网络编程中的一个重要概念,它提供了一种在网络上进行进程间通信的机制。套接字是一种抽象,它允许程序通过网络发送和接收数据。在通常的情况下,套接字用于实现不同计算机之间的通信,但它也可以在同一台计算机内的不同进程之间进行通信。
#include <stdio.h>
int main(){
union {
short value;//2字节
char bytes[sizeof(short)];
}test;
test.value 0x0102;
if((test.bytes[0]=1)&&(test.bytes[1]=2)){
printf("大端字节序");}
else if((test.bytes[0]=2)&&(test.bytes[1]=1)){
printf(小端字节序")
else printf("未知");
}
?
????????当格式化的数据在两台使用不同字节序的主机之间直接传递时,接收端常必然错误的解释之。解决问题的方法是:发端总是把要发送的数据转换成大端字节序数据后再发送,而接收端知宜对方传送过来的数据总是采用大端字节序,以接收端可以根据自身采用的字节序决定是香对接收到的数据进行转换(小端机转换,大端机不转换)。
????????网络字节顺序(大端)是TCP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能被正确解释,网络字节顺序采用大端排序方式。 BSD Socket提供了封装的转换接口,方使程序员用。包括从主机字节序到络字节序的换函数: htons、htonl;从网络字节序到主机字节序的转换函数:ntohs、ntohl.
#include <stdio.h>
#include <arpa/inet.h>
int main(){
// htons
unsigned short a = 0x0102;
unsigned short b = htons(a);
printf("%x", b);
// 如果你的机器是小端字节序,a在内存中的存储顺序是 02 01,而经过htons函数转换后,b在内存中的存储顺序是 01 02。
//如果你的机器是大端字节序,a在内存中的存储顺序是 01 02,而经过htons函数转换后,b在内存中的存储顺序是 02 01。
//htonl转换IP
char buf[4]={192,168,1,100};
int num *(int *)buf;
int sum htonl(num);
unsigned char *p (char *)∑
printf("%d%d%d%d\n",*p,*(p+1),*(p+2),*(p+3));
// ntosl
unsigned char buf1[4]{1,1,168,192};
int num1 *(int *)buf1;
int sum1=ntohl(nm1);
unsigned char *p1 (unsigned char *)&sum1;
printf("%d%d%d%d\n",*p1,*(p1+1),*(p1+2),*(p1+3)
return 0;
}