当前位置: 移动技术网 > 科技>操作系统>Linux > 认识socket

认识socket

2019年03月28日  | 移动技术网科技  | 我要评论

美少年的宠物,力帆老总儿子,韶华小猫一尾

socket

socket也称套接字,网络编程的基础。一般情况下我不喜欢直接去说socket的函数都是怎么用的,那个很多人都写出来了,而且肯定比我好的有的是。

但是今天想写的是我的理解中,产生socket的原因,我觉得只有了解socket的本质、机理,才能更灵活的使用他的api。那样就会知道为什么要那样用,会产生怎样的效果。

给我的感觉是socket就是一个接口,起着承上启下的作用。它是应用层与传输层的中间产物。

为什么要这样说?

首先对应用层来说,不管使用怎样的传输协议只要能达到想要的传输结果就可以了,它不管你使用了怎样的传输的方式,只要看到结果就

但是对传输层来说,要根据不同的需求使用不同的协议(tcp,udp 等)去传输信息。具体结构如下图所示:

 

 

 

socket函数创建socket:

#include<sys/types.h>

#include<sys/socket.h>

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

函数通过domain判别通信协议,通信协议有:

协议名称

含义

pf_unix,pf_local

本地通信

af_inet,pf_inet

ipv4 internet协议

pf_inet6

ipv6 internet协议

pf_ipx

ipx-novell协议

pf_netlink

内核用户界面设备

pf_x25

itu-t x25 / iso-8208协议

pf_ax25

amateur radio ax.25

pf_atmpvc

原始atm pvc访问

pf_appletalk

appletalk

pf_packet

底层包访问

 

 

函数通过type来判别传输协议常见的有,流式套接字、数据报套接字、原始套接字等;

名称

含义

sock_stream

tcp传输方式,可靠传输,需要连接

sock_dgram

udp传输方式不需要连接

sock_seqpacket

序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常。每次调用读系统调用时数据需要将全部数据读出

sock_raw

raw类型,提供原始网络协议访问

sock_rdm

提供可靠的数据报文,不过可能数据会有乱序

sock_packet

一个专用类型

protocol:确定socket到底支持的哪个协议一般情况下使用tcp或者udp,可以省略为零,系统会默认设置,但是如果使用原始套接字则需进行具体的设置。

此函数会返回一个int类型的数据,同时以此数据去寻找所创建的socket(你可能创建的不止一个socket),若返回值为-1则表示创建socket失败,若为一个正值则表示创建成功,由于并不是每次创建都是成功的,因此创建socket时要检测是否创建成功

if ((sock = socket(af_inet, sock_dgram, 0)) == -1)

    //创建一个使用ipv4,udp传输的socket

        {

                perror("socket");

                exit(exit_failure);

        }

总结一句话,socket就是创建一个确定传输模式的接口。

此篇博客我有去参考有:

大雄技术有限,若有错误请指出,共同进步谢谢!

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网