本文介绍tcp/ip协议的基本知识,属于入门可能还不算的知识点,但是应该是必须掌握的。

最基础的知识点大概是这样,有几个部分补充一下。

基本概念

tcp/ip协议栈模型:

  • 对等通信的概念是指服务器和客户端之间的通信只能是对等的协议层之间的通信,也就是说应用层与应用层通信,IP层与IP层通信,IP层是无法与应用层通信的
  • TCP/IP嵌入内核是因为网卡驱动收发大量数据的时候,切换到用户态会非常耗时,直接把TCP/IP放在内核中会减少数据传输的时间

TCP/IP客户端服务器基本编程模型

  • 长连接是指服务器客户端发送数据后不立马断开,而是一直保持连接状态
  • 短连接是指服务器客户端发送数据后立马断开
  • 具体采用哪种连接方式视情况而定

测试字节序与IP地址转换测试程序

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

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void main()
{
	/* 测试字节序 */
	unsigned int a= 0x12345678;
	unsigned int b;
	unsigned char *p = &a;
	printf("0x%2x 0x%2x 0x%2x 0x%2x \n",p[0],p[1],p[2],p[3]);
	(p[0]==0x78)? printf("本系统是小字节序\n") : printf("本系统是大字节序\n");
	
	printf("字节序转换为网络字节序 ...\n");
	b = htonl(a);
	p = &b;
	printf("0x%2x 0x%2x 0x%2x 0x%2x \n",p[0],p[1],p[2],p[3]);
	(p[0]==0x78)? printf("网络字节序是小字节序\n") : printf("网络字节序是大字节序\n");
	
	
	/* IP字符串 与 iPv4:32bit  与  in_addr 的转换 */
	struct in_addr T_addr;
	const char *ip = "192.168.3.123";
	in_addr_t addr;
	char *ip2;
	
	/* 字符串转in_addr结构 */
	inet_aton(ip,&T_addr);
	printf("ipv4 %u \n",T_addr.s_addr);
	
	/* 字符串转32bit */
	addr = inet_addr(ip);
	printf("ipv4 %u \n",addr);
	
	/* in_addr结构转字符串 */
	ip2 = inet_ntoa(T_addr);
	// printf("0x%x  0x%x \n",(unsigned int)ip2,(unsigned int)(&T_addr));
	printf("%s \n",ip2);
}
  • 测试结果:x86架构是小字节序,网络字节序是大字节序。。。。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

socket应用编程(2) 上一篇
信号 下一篇