关键词搜索

源码搜索 ×
×

Python:深入理解 Socket 套接字

发布2019-11-15浏览611次

详情内容

Python 提供了两个级别访问的网络服务:

1)低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,
	可以访问底层操作系统Socket接口的全部方法。
(2)高级别的网络服务模块 SocketServer, 它提供了服务器中心类,
	可以简化网络服务器的开发。

    一、什么是 Socket?

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

    Python 中,我们用 socket()函数来创建套接字,语法格式如下:

    socket.socket([family[, type[, proto]]])
    
    family: 套接字家族可以使AF_UNIX 或者 AF_INET
    type: 套接字类型可以根据是面向连接的还是非连接分为 SOCK_STREAM 或 SOCK_DGRAM
    protocol: 一般不填默认为0.
    
      5

    二、理解 AF_UNIX,AF_INET,SOCK_STREAM 和 SOCK_DGRAM

    1. AF_UNIX 和 AF_INET

    (1)AF_UNIX:基于文件
    (又名AF_LOCAL,在POSIX1.g标准中指定),它代表地址家族(addressfamily):UNIX。其他比较旧的系统可能会将地址家族表示成域(domain)或协议家族(protocolfamily),并使用其缩写PF而非AF。类似地,AF_LOCAL(在2000~2001年标准化)将代替AF_UNIX
    (2)AF_INET:面向网络
    或者地址家族:因特网。另一个地址家族AF_INET6用于第6版因特网协议(IPv6)寻址。此外,还有其他的地址家族,这些要么是专业的、过时的、很少使用的,要么是仍未实现的。在所有的地址家族之中,目前 AF_INET 是使用得最广泛的

    2. SOCK_STREAM 和 SOCK_DGRAM

    (1)面向连接的套接字:SOCK_STREAM

    TCP套接字的名字:SOCK_STREAM。
    特点:可靠,开销大。
    
    • 1
    • 2

    在进行通信之前必须先建立一个连接,该连接的通信提供序列化的、可靠的和不重复的数据交付,而没有记录边界。
    这种类型的通信也称为虚拟电路或流套接字。实现这种连接类型的主要协议是传输控制协议(缩写 TCP)为了创建 TCP套接字,必须使用 SOCK_STREAM 作为套接字类型。
    (2)无连接的套接字:SOCK_DGRAM

    UDP套接字的名字SOCK_DGRAM
    特点:不可靠(局网内还是比较可靠的),开销小。
    
    • 1
    • 2

    与虚拟电路形成鲜明对比的是数据报类型的套接字,它是一种无连接的套接字。
    在通信开始之前并不需要建立连接。此时,在数据传输过程中并无法保证它的顺序性、可靠性或重复性。数据报确实保存了记录边界,这就意味着消息是以整体发送的,而并非首先分成多个片段。
    实现这种连接类型的主要协议是用户数据报协议(缩写 UDP)。为
    了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。
    UDP套接字的SOCK_DGRAM名字来自于单词“datagram”(数据报)。

    三、Socket 对象(内建)方法

    点击参考

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载