美文网首页
网络编程

网络编程

作者: 大千世界1998 | 来源:发表于2018-10-09 22:14 被阅读0次

    网络编程

        python2.x/python3.x 对于网络编程的支持都是非常友好的,本身支持两部分非常有用的网络编程方式:
            传统网络编程
            非阻塞异步网络编程
        底层通过套接字 socket 对象的连接,完成多种协议的网络程序服务端/客户端的开发和数据通信。

    SOCKET

    socket的由来

        socket 是一种计算机网络数据结构,中文译名:套接字。

        20 世纪 70 年代,socket 是作为加利福尼亚大学的伯克利版本 Unix 系统的一部分出现的某些情况下也会被称为伯克利套接字或者 BSD 套接字。

        socket 最初是为同一主机上的应用程序创建,是主机上运行的一个程序与另一个程序之间可以完成数据通信操作,程序也称为进程,就出现了不同进程间进行数据交互的操作,因为交互的模式不同,所以也一般将程序中的套接字区分为两种:
            面向文件的套接字:通过文件进行数据交互
            面向网络的套接字:通过网络进行数据交互

        套接字最初出现之后,为了区分不同平台不同体系的套接字模型对象,定义了地址家族的概念:Adress Family,也经常简写为 AF。

        Unix 系统中的套接字就是第一种家族套接字,称为 AF_UNIX,或AF_LOCAL,这是 POSIX1标准中规范的。

        同样也有一些体系平台下,对于套接字的划分通过协议家族(Protocal Family)进行规范,可以简写为 PF,考虑到兼容性的要求,PF 和 AF 在一些平台上都集成了互相兼容的实现,python 本身支持的是更加标准化的 AF 地址家族。

        另一种地址家族就是面向网络的套接字模型对象了,经典的如 AF_INET 支持的是传统第四个版本的因特网协议寻址[IPv4],同时也提供了 AF_INET6 用于支持第六个版本的因特网协议寻址[IPv6]。

    PYTHON中的套接字

        套接字模型对象,为了能明确的表示网络中一台数据交互的主机,需要通过 IP 地址寻址确定主机位置,通过 PORT 端口号确定主机交互接口在网络套接字交互过程中,出现了两种类型的套接字模型:
            面向连接的套接字模型
            面向无连接的套接字模型

        面向连接的套接字模型,在进行网络数据传输过程中,首先要创建一个连接模型,通过指定的连接模型进行数据的交互,类似我们生活中拨打电话一样,首先保证通话连接的基础上才能完成通话内容的交互,比较经典的如 TCP 端对端传输协议就是面向连接的套接字对象。

        面向无连接的套接字模型,在进行网络数据传输过程中,不需要有效的网络连接模型,在数据传输过程中只负责发送/接受,不保证数据的完整性和实效性;类似我们生活中的广播电台、电视信号等等,操作效率要比面向连接的套接字模型更加高效;比较经典的 UDP 广播协议使用的就是面向无连接的套接字对象。

        python 中提供的网络连接套接字,主要包含在 socket 模块中。
        socket 模块提供了 socket()函数可以完成如上描述的各种网络套接字的构建、通信等操作。

    基本语法结构

    socket.socket(socket_family, socket_type, protocal=0)
    socket_family:socket 地址家族,AF_UNIX/AF_LOCAL 或者 AF_INET
    socket_type:socket 连接类型
    面向连接的(SOCK_STREAM),面向无连接的(SOCK_DGRAME)
    protocal:传输协议,一般不用设置,使用默认值进行自动匹配就好

    创建 TCP 协议的套接字 socket 对象:

    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    创建 UDP 协议的套接字 socket 对象:

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    socket套接字常用操作
    属性 描述
    s.bind() 绑定(主机名称、端口)到一个套接字上
    s.listen() 设置并启动TCP监听
    s.accept() 等待客户端连接
    s.connect() 连接指定服务器
    s.connect_ex() 连接指定服务器
    s.recv() 接收TCP消息
    s.recv_into 接收TCP消息到缓冲区
    s.send() 发送TCP消息
    s.sendall() 完整发送TCP消息
    s.recvfrom() 接收UDP消息
    s.recvfrom_into() 接收UDP消息到缓冲区
    s.sendto() 发送UDP消息
    s.shutdown() 关闭连接对象
    s.close() 关闭套接字对象

    相关文章

      网友评论

          本文标题:网络编程

          本文链接:https://www.haomeiwen.com/subject/ujquaftx.html