套接字类型与协议设置

本次学习主要了解socket函数的创建以及不同套接字的特性,只涉及到socket函数,所以大家不用觉得困难,但是会有些枯燥,这是后面实际网络编程的基础,需要好好掌握。

看一下socket函数:
#include<sys/socket.h>
int socket(int domain,int type,int protocol);
第一个参数是套接字使用的协议族信息,第二个是套接字数据传输类型信息,第三个是计算机通信中用的协议信息(套接字实际采用的最终协议信息),第一个参数一般是IPV4协议族(PF_INET),第一个参数决定第三个参数

2、Type决定了套接字数据传输方式,下面介绍两种典型的套接字类型;
(1)、面向连接的套接字(socket _stream)
面向连接的套接字可以看成是一条传送带,两端各有一个工人,传送糖果,一般来说,传送的糖果不会丢失,而且也是先后有序的,并且没有边界,糖果是一个个发送的,但是接受100个才打包。
面向连接的套接字有一个缓冲,也就是字节数组,一旦缓冲满了会停止传输,防止数据丢失。
所以面向连接的套接字:可靠的,有序的,基于字节的,一一对应的疏忽传输方式。

(2)、面向消息的套接字(socket_dgram)
可以看成是摩托车送快递。以高速数据传输为目的,不强调按序传递,数据可能丢失或损毁,而且传输的数据大小有限,并且数据有边界,意味着,传输次数和接收次数相同。这种套接字是没有连接概念的。
3、第三个参数决定了协议的最终选择
第三个参数主要在这种情况下使用:同一协议族中存在多个数据传输方式相同的协议。
在IPV4中,满足面向连接和消息的套接字都只有一种;如下
int tcp_socket=socket(PF_INET,SOCKET_STREAM,IPPROTO_TCP)
int udp_socket=socket(PF_INET,SOCKET_DGRAM,IPPROTO_UDP)
其中第三个参数可以用0代替,因为符合要求的具体协议只有一种,
学过计算机网络的同学对这个TCP/UDP协议应该很熟悉,学起来更加熟练。

实例的话,我们对之前客户端read函数进行修改,每次读取一个字节的数据,然后打印出调用read函数的次数,就可以验证,详细代码可以看之前的github链接。

猜你喜欢

转载自blog.csdn.net/weixin_53344209/article/details/114030560