码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程基础

时间:2014-07-06 10:18:29      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:style   color   使用   strong   文件   数据   

本文目录:

一:网络地址结构体的介绍

二:大端序和小端序的简单介绍以及它们转换的函数接接口



一:网络地址结构体的介绍

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开始:

小端字节序:

bubuko.com,布布扣


大端字节序:

bubuko.com,布布扣

字节序转换
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地址。









网络编程基础,布布扣,bubuko.com

网络编程基础

标签:style   color   使用   strong   文件   数据   

原文地址:http://blog.csdn.net/chun_1959/article/details/37039449

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!