socket编程第一节(什么是socket)

socket可以看成是用户进程与内核网络协议栈的编程接口。

socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。

  IPV4套接口地址结构

通用地址结构

网络字节序

 如何查看自己机器上的字节序是大端字节序还是小端字节序

int main()
{
	unsigned int x = 0x12345678;
	unsigned char *p = (unsigned char*)&x;
	printf("%x %x %x %x\n",p[0],p[1],p[2],p[3]);
	return 0;
}

执行结果:

这是小端字节序。

字节序转换函数

实现一个主机字节序转换成网络字节序:

#include <stdio.h>
#include <arpa/inet.h>
int main()
{
	unsigned int x = 0x12345678;
	unsigned char *p = (unsigned char*)&x;
	printf("%0x %0x %0x %0x\n",p[0],p[1],p[2],p[3]);
	unsigned int y = htonl(x);
	p = (unsigned char *)&y;
	printf("%0x %0x %0x %0x\n",p[0],p[1],p[2],p[3]);
	return 0;
}

结果:

从小端字节序转换成大端字节序。其中就一行代码搞定:

unsigned int y = htonl(x);

就是实现主机字节序转换成网络字节序。

地址转换函数

将点分十进制ip地址转换成32位的整数主机字节序打印出来;

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
	unsigned long addr = inet_addr("192.168.0.100");
	printf("addr=%u\n",ntohl(addr));
	return 0;
}

结果:

这行代码的意思就是将点分十进制的IP地址转换成无符号的32位整数。

	unsigned long addr = inet_addr("192.168.0.100");

 这个函数是讲地址结构转换成点分十进制的IP地址

#include <stdio.h>
#include <arpa/inet.h>

int main()
{
	unsigned long addr = inet_addr("192.168.0.100");
	printf("addr=%u\n",ntohl(addr));

	struct in_addr ipaddr;//定义一个地址结构
	ipaddr.s_addr = addr;	//把上面已经转换好的ip地址赋值给地址结构中的地址
	printf("%s\n",inet_ntoa(ipaddr));//打印输出点分十进制IP地址
	return 0;
}

 结果:

这个函数和

 

这个函数的意义一样的。

也是把点分十进制转换成网络字节序地址,后面的参数是输出参数。

套接字类型

猜你喜欢

转载自blog.csdn.net/m0_38036750/article/details/87281556