首页 理论教育ARM嵌入式系统原理与应用中创建套接字函数

ARM嵌入式系统原理与应用中创建套接字函数

【摘要】:在Linux下使用socket()函数来创建套接字,其函数原型为:int socket;各参数含义如下。这种套接字计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。表8.1协议族与socket类型续表3.protocol表示传输协议常用的有IPPROTO_TCP和IPPTOTO_UDP,分别表示TCP传输协议和UDP传输协议。因此可通过如下方法创建TCP套接字和UDP套接字。int socket=socket;//创建TCP套接字int socket=socket;//创建UDP套接字

在Linux下使用socket()函数来创建套接字,其函数原型为:

int socket(int af,int type,int protocol);

各参数含义如下。

1.af(Address Fam ily)为地址

地址族也就是IP地址类型,常用的有AF_INET和AF_INET6。AF是“Address Family”的简写,INET是“Inetnet”的简写。AF_INET表示IPv4地址;AF_INET6表示IPv6地址。

也可以使用PF(Protocol Family)协议族,它和AF是一样的。例如,PF_INET等价于AF_INET,PF_INET6等价于AF_INET6。

常见的协议族如下。

◆PF_UNIX,PF_LOCAL:用于本地进程间通信;

◆PF_INET:IPv4协议;

◆PF_INET6:IPv6协议;

◆PF_NETLINK:用于内核与应用程序通信;

◆PF_PACKET:用于访问底层数据。

2.type为数据传输方式/套接字类型

常用的有SOCK_STREAM(流格式套接字/面向连接的套接字)、SOCK_DGRAM(数据报套接字/无连接的套接字)和SOCK_RAW(原始类型)。

SOCK_STREAM是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送,有自己的纠错机制。

SOCK_STREAM有以下几个特征:

◆数据在传输过程中不会消失;

◆数据是按照顺序传输的;

◆数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。(www.chuimin.cn)

SOCK_DGRAM也叫“无连接的套接字”。这种套接字计算机只管传输数据,不作数据校验,如果数据在传输中损坏,或者没有到达另一台计算机,是没有办法补救的。也就是说,数据没有纠错机制,也无法重传。

SOCK_DGRAM有以下几个特征:

◆强调快速传输而非传输顺序;

◆传输的数据可能丢失也可能损毁;

◆限制每次传输的数据大小;

◆数据的发送和接收是同步的。

SOCK_RAW是原始类型,这种类型可以访问底层的原始数据。

不同的协议族可以支持不同的socket类型,相同的socket建立在不同的协议族上,其功能也是不同的,表8.1所示常见协议族与socket类型组合及实际作用。

表8.1 协议族与socket类型

续表

3.protocol表示传输协议

常用的有IPPROTO_TCP和IPPTOTO_UDP,分别表示TCP传输协议和UDP传输协议。

当协议族为PF_INET,socket类型采取SOCK_STREAM时,一定使用TCP协议;socket类型采取SOCK_DGRAM时,一定使用UDP协议。在这种情况下,protocol参数可取0。因此可通过如下方法创建TCP套接字和UDP套接字。

int socket=socket(AF_INET,SOCK_STREAM,0);//创建TCP套接字

int socket=socket(AF_INET,SOCK_DGRAM,0);//创建UDP套接字