目录
- socket
- 字节序
- 字节序转换函数
- socket地址
- IP地址转换
- TCP通信流程
- 套接字函数
socket
套接字,与管道类似,应用于网络进程间数据的传递。而管道主要应用于本地进程间的通信
服务器端被动接受连接,一般不会主动发起连接。客户端主动向服务器发起连接。就像一个插座一样。
字节序
小端字节序:整数的低位字节存储在低位地址,整数的高位字节存储在内存的高位地址
目前大部分计算机都用的小端字节序,当然也有例外用的大端字节序。如果不同计算机通信时用的字节序不一样,那么就会出问题
#include<stdio.h>int main(){union{short value;//2字节char bytes[sizeof(short)];//char[2]} test;test.value=0x0102;if((test.bytes[0]==1)&&(test.bytes[1]==2)){printf("大端字节序\n");}else if((test.bytes[0]==2)&&(test.bytes[1]==1)){printf("小端字节序\n");}else{printf("未知\n");}return 0;
}
字节序转换函数
htons 转换端口
#include <stdio.h>
#include <arpa/inet.h>int main(){//htonsunsigned short a=0x0102;unsigned short b=htons(a);printf("a:%x\n",a);printf("b:%x\n",b);return 0;
}
htonl 转换IP
#include <stdio.h>
#include <arpa/inet.h>int main(){//htonsunsigned short a=0x0102;unsigned short b=htons(a);printf("a:%x\n",a);printf("b:%x\n",b);//htonl 转换IPchar 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));return 0;
}
变成了网络字节序
#include <stdio.h>
#include <arpa/inet.h>int main(){//htonsunsigned short a=0x0102;unsigned short b=htons(a);printf("a:%x\n",a);printf("b:%x\n",b);//htonl 转换IPchar 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));//ntohsunsigned char buf1[4]={1,1,168,192};int num1=*(int *)buf1;int sum1=ntohl(num1);unsigned char *p1=(unsigned char *)&sum1;printf("%d %d %d %d\n",*p1,*(p1+1),*(p1+2),*(p1+3));return 0;
}
socket地址
socket是一个结构体,用于封装端口号和IP等信息
IP地址转换
将点分十进制的字符串,转换为一个整数
将网络字节序的IP整数转换成点分十进制的IP字符串
#include<arpa/inet.h>
#include<stdio.h>int main(){//创建一个ip字符串char buf[]="192.168.1.4";unsigned int num=0;//将巅峰十进制的IP字符串转换成网络字节序的整数inet_pton(AF_INET,buf,&num);unsigned char * p=(unsigned char *)#printf("%d %d %d %d\n",*p,*(p+1),*(p+2),*(p+3));//将网络字节序的IP整数转换成点分十进制的IP字符串char ip[16]="";const char * str =inet_ntop(AF_INET,&num,ip,16);printf("%s\n",str);return 0;
}
TCP通信流程
UDP适合用于实时应用(视频会议、直播),TCP适合可靠性高的应用(文件传输)。UDP在数据传输过程中不可靠,可能会丢失