网络编程基础
来源:互联网 发布:linux内核poll流程 编辑:程序博客网 时间:2024/06/06 13:04
本文目录:
一:网络地址结构体的介绍
二:大端序和小端序的简单介绍以及它们转换的函数接接口
一:网络地址结构体的介绍
Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种特殊的文件描述符。
套接字socket有三种类型:
• 流式套接字(SOCK_STREAM):流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。TCP保证了数据传输的正确性和顺序性。
• 数据报套接字(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报协议UDP。
•原始套接字(SOCK_RAM):原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。
网络地址结构体:
struct sockaddr
{
u_short sa_family; //Sa_family:地址族,采用“AF_xxx”的形式,如:AF_INET。
char sa_data[14]; //Sa_data:14字节的特定协议地址。
}
struct sockaddr_in
{
short int sin_family; /* Internet地址族*/
unsigned short int sin_port; /* 端口号*/
struct in_addr sin_addr; /* IP地址*/
unsigned char sin_zero[8]; /* 填0 */
}
struct in_addr
{
unsigned long s_addr;
}
S_addr: 32位的地址。
编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构。
二:大端序和小端序的简单介绍以及它们转换的函数接接口
IP地址通常由数字加点(192.168.0.1)的形式表示,而在struct in_addr中使用的是IP地址是由32位的整数表示
的,为了转换我们可以使用下面两个函数:
int inet_aton(const char *cp,struct in_addr *inp)
char *inet_ntoa(struct in_addr in)
函数里面a 代表ascii n代表network.第一个函数表示将a.b.c.d形式的IP转换为32位的IP,存储在inp指针里面。第二个是将32位IP转换为a.b.c.d的格式。
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。传输时能够被正确解释。网络字节顺序采用big endian排序方式。
32bit的整数(0x01234567)从地址0x100开始:
小端字节序:
大端字节序:
字节序转换
htons把unsigned short类型从主机序转换到网络序;
vhtonl把unsigned long类型从主机序转换到网络序;
vntohs把unsigned short类型从网络序转换到主机序;
vntohl把unsigned long类型从网络序转换到主机序;
注意:在实验编码中,有很多的与地址相关的函数,如htons(),thonl(),inet_addr()等。是我们进行网络编程必须掌握的相关知识,其中htonl用于将本机上的long型数据转换为网络上的long型数据,htons()转化为的对象时short型的,inet_addr()可以将字符串表示的ip地址转化为整形的ip地址。
- 网络编程:网络基础
- 网络编程基础
- 网络编程基础
- c#网络编程基础
- 网络编程基础(1)
- 网络编程基础(2)
- 网络编程基础(3)
- 网络编程知识基础
- VC网络编程基础
- linux网络编程基础
- 网络编程基础篇
- VC网络编程基础
- VC网络编程基础
- VC网络编程基础
- Linux 网络编程基础
- Socket网络编程基础
- socket网络编程基础
- 网络编程基础
- OCP 1Z0 053 84
- 遥控器对码与飞控解锁
- dataGridview 查看列是否存在..........
- Android工程目录结构相关(eclipse)
- phoneGap简单分析
- 网络编程基础
- 安装完MySQL后必须要调整的10项配置
- Trace宏:TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能。
- ubuntu 用户名无法使用 sudo 问题
- ajax简单封装
- Activity生命周期
- CSDN专访:大数据时代下的商业存储
- 数组与对象
- maven下载和设置