ipconfig
点分十进制字符串和用网络字节序整数表示的IPV4地址的转换
#include <arpa/inet.h>
// p:点分十进制的IP字符串,n:表示network,网络字节序的整数
int inet_pton(int af, const char *src, void *dst);
af:地址族: AF_INET AF_INET6
src:需要转换的点分十进制的IP字符串
dst:转换后的结果保存在这个里面
// 将网络字节序的整数,转换成点分十进制的IP地址字符串
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
af:地址族: AF_INET AF_INET6
src: 要转换的ip的整数的地址
dst: 转换成IP地址字符串保存的地方
size:第三个参数的大小(数组的大小)
返回值:返回转换后的数据的地址(字符串),和 dst 是一样的
*/
#include <stdio.h>
#include <arpa/inet.h>
int main() {
// 创建一个ip字符串,点分十进制的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("str : %s\n", str);
printf("ip : %s\n", str);
printf("%d\n", ip == str);
return 0;
}
TCP通信流程
TCP-UDP传输层的协议
UDP:用户数据报,面向无连接,可以单播,多播、广播,面向数据报,不可靠,对于实时性要求高的情况下,用UDP,效率高
TCP:传输控制协议,面向连接的,可靠的,基于字节流,仅支持单播传输(点对点)
通信流程
服务器(被动接受连接)
1.创建一个用于监听的套接字
-监听:监听有客户端的连接
-套接字:就是一个文件描述符,
2.将这个监听的文件描述符和本地的IP和端口绑定
-客户端链接服务器的时候使用的就是这个IP和端口
3.设置监听,监听的fd开始工作
4.阻塞等待,等待客户端连接。当有客户端发起连接,解除阻塞。会得到一个和客户端通信的套接字(fd)
5.通信、
6.通信结束 -断开连接
客户端
1.创建一个用于通信的套接字(fd)
2.连接服务器,需要指定连接服务器的ip和端口
3.连接成功,客户端可以直接和服务器通信
-接受数据
-发送数据
4.通信结束,断开连接