SOCK_STREAM与SOCK_DGRAM套接口类型

SOCK_STREAM (流套接口)

1、不保留任何消息的边界

      举一个例子:本地主机通过两次独立的write(2)调用向远程主机发送数据,第一次本地进程写入25字节的数据,并通过套接口发送到远程进程,第二次再写入30字节的数据发往远程进程,总共55字节的数据,而远程进程从套接口接收数据时,将消息作为一个完整的单元来接收,或是通过若干次独立的读操作来将数据取走,即接受端并不知道这55字节的数据是分25字节和30字节两次来发送的。

2、有序性  可以保证接受的数据字节与发送是顺序完全一致(意味着通信之前必须建立一个连接)

3、无错性   可以保证接受的数据在接收端被无错的接受。如果有错误发生,在尝试完所有的错误恢复措施后仍无法消除错误,流套接口就会报告错误。所进行的错误恢复措施尝试是完全自动的,不需编程者的指导。



SOCK_DGRAM (数据报套接字)

特征:

1、分组在发送后,可能无序地到达接收端

2、分组可能丢失。如果发生丢失,不会采取任何补救的措施,而且接受端也不必知道有分租丢失。

3、数据报分组有尺寸大小的限制,如果超出限制,在某些路由器和节点上就无法传送。

4、分组是在不建立连接的情况下被发送到远程进程的。


所以如果你需要传输的数据是准确的,建议采用TCP,也就是                              SOCK_STREAM
如果你传输的是视频音频等数据,丢几个包也无所谓的,可以采用UDP,也就是  SOCK_DGRAM


函数原型
int socket(int domain, int type, int protocol);

第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);
两个重要的类型是 SOCK_STREAM 和 SOCK_DGRAM。 SOCK_STREAM表明数据象字符流 一样通过 socket 。而 SOCK_DGRAM 则表明数据将是数据报(datagrams)的形式。


下面表示通信协议族用TCP/IP协议族,以流套接字类型传输,使用TCP协议
SOCKET  testSocket  = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 

下面表示通信协议族用TCP/IP协议族,以数据报套接字类型传输,使用UDP协议
SOCKET testSocket  =  socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值