• Python的网络编程[0] -> socket[1] -> socket 模块


    socket


    1. 常量 / Constants


    AF_* 和 SOCK_* 分别属于 AddressFamily 和 SocketType

    1.1 AF_*类常量

    • socket.AF_UNIX:  UNIX本地通信使用
    • socket.AF_INET:   IPv4连接时使用
    • socket.AF_INET6: IPv6连接时使用

           这类常量代表了AddressFamily,用于socket()的第一个参数

    1.2 SOCK_*类常量

    •        socket.SOCK_STREAM:     有保障传输面向连接的socket,基于TCP
    •        socket.SOCK_DGRAM:       无保障传输面向消息的socket,基于UDP
    •        socket.SOCK_RAW:            原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不方便,主要用于一些协议的开发。
    •        socket.SOCK_RDM:
    •        socket.SOCK_SEQPACKET:

           这类常量代表了 socket 的类型,常用于 socket() 的第二个参数。

           SOCK_STREAM 为有保障传输,能保障数据正确传送到对方,面向连接的socket,多用于资料传送,是数据流,一般是TCP/IP协议的编程;

           SOCK_DGRAM 为无保障传输面向消息,主要用于网络上发广播信息,是数据包,是 UDP 协议网络编程。

    2. 函数 / Function


    2.1 inet_aton()函数

    函数调用: packed_ip = socket.inet_aton(addr)

    函数功能: 将字符串类型的IP地址转换成32位packed二进制格式

    传入参数: addr

     addr, string类型,IP地址的字符串,‘123.45.67.89’格式

    返回参数: packed_ip

     packed_ip, bytes类型,加码后的IP地址

    2.2 inet_ntoa()函数

    函数调用: addr = socket.inet_ntoa(packed_ip)

    函数功能: 将32位packed二进制格式的IP地址转换成字符串类型

    传入参数: packed_ip

    packed_ip, bytes类型,加码的IP地址

    返回参数: addr

    addr, str类型,IP地址的字符串,‘123.45.67.89’格式

    3. 类 / Class


    3.1 socket()

    类实例化:instance = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

    类的功能: 用于建立套接字socket

    传入参数: family, type, proto, fileno

    family: 内建常数,代表地址族,对于socket底层为int

    type: 内建常数,代表数据类型,对于socket底层为int

    proto: int类型

    fileno: NoneType类型

    返回参数: instance

    3.1.1 bind()方法

    函数调用: instance.bind(address)

    函数功能:用于服务端对指定的地址进行绑定

    传入参数: address

    address: tuple类型,包含IP和端口,address = (ip, port)

    返回参数:

    3.1.2 connect()方法

    函数调用: instance.connect(address)

    函数功能: 用于客户端对指定的地址进行连接

    传入参数: address

    address: tuple类型,包含IP和端口,address = (ip, port)

    返回参数:

    3.1.3 listen()方法

    函数调用: instance.listen(num)

    函数功能: 用于设置服务端的最大监听数量

    传入参数: num

    num, int类型

    返回参数:

    3.1.4 accept()方法

    函数调用: new_socket, address = instance.accept()

    函数功能: 用于服务端对尝试连接的客户端进行接收,并返回新的通信socket和地址

    传入参数: address

    address, tuple类型,包含IP和端口,address = (ip, port)

    返回参数: new_socket, address

    new_socket: object类型,为新的通信实例,用于与连接的客户端进行通信,address: tuple类型,为连接的信息,包含IP和端口,address = (ip, port)

    3.1.5 send()方法

    函数调用: instance.send(msg)

    函数功能: 用于(TCP)数据的发送

    传入参数: msg

    msg, bytes类型,可通过string.encode(‘utf-8’)或者bstring转换得到

    返回参数:

    3.1.6 recv()方法

    函数调用: data = instance.recv(bufSize)

    函数功能: 用于(TCP)数据的发送

    传入参数: bufSize

    bufSize, int类型,代表最大传输数据,通常可取1024,不宜超过4096

    返回参数: data

    data, bytes类型,为返回数据,可通过data.decode(‘utf-8’)解码

    3.1.7 sendto()方法

    函数调用: instance.sendto(msg, addr)

    函数功能: 用于(UDP)数据的发送

    传入参数: msg, addr

    msg, bytes类型,可通过string.encode(‘utf-8’)或者bstring转换得到

    addr, tuple类型,包含目标IP和端口,address = (ip, port)

    返回参数:

    3.1.8 recvfrom()方法

    函数调用: data, addr = instance.recvfrom(bufSize)

    函数功能: 用于(UDP)数据的发送

    传入参数: bufSize

    bufSize, int类型,代表最大传输数据,通常可取1024,不宜超过4096

    返回参数: data, addr

    data, bytes类型,为返回数据,可通过data.decode(‘utf-8’)解码

    addr, tuple类型,包含发送者的IP和端口,address = (ip, port)

    3.1.9 setsockopt()方法

    函数调用: instance.setsockopt(level, option, value)

    函数功能: 用于设置socket的各项功能,

    选项

    类型

    意义

    SO_BROADCAST

    BOOL

    允许套接口传送广播信息

    SO_REUSEADDR

    BOOL

    允许套接口和一个已在使用中的地址捆绑

    SO_DEBUG

    BOOL

    记录调试信息

    SO_DONTLINER

    BOOL

    不要因为数据未发送就阻塞关闭操作。设置本选项相当于将SO_LINGER的l_onoff元素置为零

    SO_DONTROUTE

    BOOL

    禁止选径;直接传送

    SO_KEEPALIVE

    BOOL

    发送“保持活动”包

    SO_LINGER

     

    如关闭时有未发送数据,则逗留

    SO_OOBINLINE

    BOOL

    在常规数据流中接收带外数据

    SO_RCVBUF

    INT

    为接收确定缓冲区大小

    SO_SNDBUF

    INT

    指定发送缓冲区大小

    TCP_NODELAY

    BOOL

    禁止发送合并的Nagle算法

    传入参数: level, option, value

    level, SOL_SOCKET和IPPROTO_TCP两种层次,分别表示Socket属性和TCP属性

    option, 各类设置项

    value, 设置项的选项值

    返回参数:

    4. 相关阅读


    1. socket 与 TCP/UDP

    2. 利用 socket 建立 TCP/UDP 通信

    5. 参考链接


    https://zhidao.baidu.com/question/127548969.html

    http://blog.csdn.net/sinat_28494049/article/details/46006233

    http://blog.csdn.net/youxiazzz12/article/details/25634143

    http://www.cnblogs.com/wdpp/archive/2010/10/27/2386873.html

  • 相关阅读:
    4408: [Fjoi 2016]神秘数
    UOJ #35. 后缀排序[后缀数组详细整理]
    POJ 2887 Big String
    搜索过滤grep(win下为findstr)
    解决putty自动断开的问题
    > >> 将错误输出到文件
    环境变量
    端口被占用,查看并杀死占用端口的进程
    查找文件路径find
    【vim使用】
  • 原文地址:https://www.cnblogs.com/stacklike/p/8117926.html
Copyright © 2020-2023  润新知