1.总体目标。

临时搞不懂哪些好的应用领域。现阶段的总体目标是让两部机器设备根据互联网传送数据,例如单片机开发板和Linux服务器间的传输数据。之后单片机开发板能够利用互联网汇报数据信息,或是服务器能够实现联网控制单片机开发板。

除此之外,大家临时不愿关注实际的网络模型,反而是更关心互联网有关作用的立即应用。

linux编程基础-linux基础知识总结-第1张图片2.Linux网络编程基础。

2.1嵌入词。

好几个TCP联接或好几个应用软件过程很有可能需求同样的TCP端口来传送数据。

为了更好地区别不一样使用的过程和联接,许多电子计算机电脑操作系统都保证了一个名叫* * socket * *的插口,用以运用和TCP/IP中间的互动。

Linux中的网络编程技术是根据Socket插口完成的,Socket插口是一种文件描述符。

常见的TCP/IP有下列三种种类的嵌入词:

嵌入英语单词流(SOCK_STREAM)

用以给予朝向联接,靠谱的传输数据服务项目,即应用TCP开展传送。

数据信息报嵌入字

用以给予无联接服务项目,即应用UDP开展传送。

初始嵌入英语单词(SOCK_RAW)

你能读写能力没经核心解决的IP数据报,而流嵌入字只有载入TCP数据信息,而数据信息报嵌入字只有载入UDP数据信息。

因而,假如要浏览别的协议书推送的数据信息,务必应用最原始的嵌入字,那样能够同时浏览最底层协议书(如IP或ICMP)。

2.2端口号

TCP/IP协议中的端口号,端口的范畴是以0到65535。

一个是互联网技术特定名字号企业ICANN分派给一些常用应用的“著名端口号”,其值一般为0~1023。例如http的端口是80,FTP是21,SSH是22,Telnet是23这些。

另一种种类由客户界定,一般是超过1024的正整数值。

2.3IP地址

说到底,通讯是过程中间的通讯(不一样电子计算机上的过程中间的通讯)。

在互联网中,每一个连接点(电子计算机或路由器)都是有一个IP地址,比如192.168.1.4,这也是IP地址。

当2个进程通信时,他们就必须最先明确分别节点的IP地址。

可是,IP地址只有决策过程所属的电子计算机,一台电子计算机很可能与此同时运作好几个过程,因而没法仅根据IP地址来决策互联网中与哪一个进程通信,因而Windows sockets必须包括别的信息内容,即端口。

在电子计算机中,一个端口一次只有分派给一个过程,换句话说,在电子计算机中,端口和过程中间是一一对应的。

因而,端口和IP地址的组成能够在所有互联网中唯一地标志一个互联网过程。

比如,假如互联网中一台电子计算机的IP是192.168.1.4,电脑操作系统分派给电子计算机中一个应用软件过程的端口是1500,那麼192.168.1.4 1500就组成了一个windows sockets。

2.4IP地址的文件格式在Socket编程设计中,struct sockaddr用以纪录IP地址,其文件格式如下所示:

struct sockaddr{ unsigned short sa_family; /*协议书族,选用AF_XXX的方式,比如AF_INET(IPv4协议书族)*/ char sa_data[14]; /*14字节数的协议书详细地址,包括该socket的IP地址和端口。*/};

殊不知,在具体编写程序中,并没有应用sockaddr算法设计,反而是应用了与其说等效电路的sockaddr_in算法设计:

struct sockaddr_in{ short int sa_family; /*详细地址族*/ unsigned short int sin_port; /*端口*/ struct in_addr sin_addr; /*IP地址*/ unsigned char sin_zero[8]; /*添充0 以维持与struct sockaddr一样尺寸*/};linux编程基础-linux基础知识总结-第2张图片2.4.1IP地址汉语翻译。

IP地址一般用一个数据加一点来表明(比如192.168.1.a),而struct in_addr中采用的公式计算是一个32位整数金额。因而,Linux给予了下列作用在他们中间开展变换:

inet_aton()涵数:所必须库函数#include #include #include

作用文件格式:

int inet_aton(const char *cp, struct in_addr *inp);

作用:将a.b.c.d字符串数组方式的IP地址变换为32位互联网系列号IP地址;*cp:用以以字符串数组方式储存IP地址的表针*inp:用以储存32位互联网系列号的IP地址。

传参:变换取得成功,回到非0,不然回到0;

inet_ntoa()涵数:远程服务器端:所必须库函数#include #include #include

作用文件格式:

char *inet_ntoa(struct in_addr in);

作用:将32位互联网系列号IP地址变换为a.b.c.d字符串数组方式的IP地址;In:互联网技术主机地址的构造。

传参:变换取得成功,回到标识符表针,不然为空;被回到;

linux编程基础-linux基础知识总结-第3张图片2.4字节数次序。

不一样的cpu很有可能对自变量选用不一样的字节数储存次序。

常见的X86构造是小端模式,许多ARM和DSP全是小端模式,即运行内存的低详细地址储存数据信息的低字节,高详细地址储存数据信息的高字节。

当KEIL C51处在大端方式时,运行内存的高详细地址储存数据信息的低字节,低详细地址储存数据信息的高字节。

数据传输,数据信息次序务必一致,互联网字节数次序选用大端字节数次序方法。

下列是四种常见的变换涵数:

服务器到互联网:

Htons()涵数:

必须库函数:

#include

作用文件格式:

unsigned short int htons(unsigned short int hostshort)

作用:将主要参数特定的16位服务器标识符编码序列转换成为互联网标识符编码序列;Hostshort:要改变的16位服务器标识符系列号传参:回到相应的互联网标识符系列号;

htonl()涵数:所必须库函数:#include

作用文件格式:

unsigned long int htons(unsigned long int hostlong)

作用:将主要参数特定的32位服务器标识符编码序列转换成为互联网标识符编码序列;Hostlong:要改变的32位服务器标识符系列号传参:回到相应的互联网标识符系列号;

互联网到服务器:

ntohs()涵数:所必须库函数:#include

作用文件格式:

unsigned short int ntohs(unsigned short int netshort)

作用:将主要参数特定的16位互联网(net)标识符编码序列转换成为服务器标识符编码序列;Netshort:要改变的16位互联网标识符编码序列的总数。

传参:回到相应的服务器标识符编号;

ntohl()涵数:所必须库函数:#include

作用文件格式:

unsigned long int ntohl(unsigned long int netlong)

作用:将主要参数特定的32位互联网(net)标识符编码序列转换成为服务器标识符编码序列;Netshort:要改变的32位互联网标识符系列号传参:回到相应的服务器标识符系列号;

评论(0条)

刀客源码 游客评论