zoukankan      html  css  js  c++  java
  • pythonsocket模块

    socket

    1.定义:

      socket又称为“套接字”,应用程序通常通过套接字向网络发去请求,或者应答网络请求,使主机之间或者一台计算机中的进程可以通讯。

    2.创建:

       创建套接字 

    1 import socket
    2  
    3 my_socket = socket.socket(family=AF_INIT, type=SOCK_STREAM, proto=0, fileno=None) 

    【参数】family:AF_INIT(IPv4地址族, 默认)  
                              AF_INET6(IPv6地址族) 

                              AF_UNIX(Unix地址族) 

                              AF_CAN(CAN总线)                                  

                              AF_RDS(汽车等移动收音)

                  type:SOCK_STREAM(流服务,默认,传输层TCP)

                          SOCK_DGRAM(数据包,传输层UDP)

                          SOCK_RAW(原始套接字,用来自行组装数据包)

                  proto:一般不填写,默认为0

                              当family=AF_CAN, proto则为CAN_RAW或者CAN_BCM

                 返回值:<class 'socket.socket'>

    3.socket对象方法:

      

    my_socket.bind(address, port):将套接字绑定到地址,address格式取决于地址族。AF_INET下,以(host, port)元组(host为str格式,port为int格式,组成元组)表示。address一般写空字符串,监听任意IP地址,后面端口自己设置,监听所有自己设置端口的任意IP地址发送的请求连接。

    my_socket.listen(backlog):启动服务器以接收连接。backlog为拒绝连接之前可连接的最大数量,至少为0

    # backlog 代表着有多少个已经建立的但是没有被 accept 取走的连接数量。

    另外,有个内核参数 net.core.somaxconn 定义了 socket 同时 listen 的最大连接数,所以 socket.listen() 指定的值不能超过 net.core.somaxconn。

    # (不常用)my_socket.setblocking(bool):默认值为True,如果设置False,recv()或者accept()无数据,则报错

    my_socket.accept():服务器接收客户端连接。返回(cli_connect_address, port)  # cli_connect_socket:client_connect_socket:客户端套接字,

    # (不常用)socket.gethostname():返回python解释器当前运行的主机名

    cli_socket.connect(address):客户端连接服务器。address格式取决于地址族。默认以address = (hostname, post),hostname为本机主机名,post为代连接服务器端口。

    cli_socket.connect_ex(address):同上。只不过会有返回值。连接失败返回0,成功返回编码

    my_socket.close()/cli_socket.close():关闭套接字。

    s_cli_socket.recv(buffersize, flag):接收套接字数据。返回字符串,buffersize为最多接收的数量。

    s_cli_socket.recvfrom(buffersize, flag):同上。返回(data, address),address为与之连接的地址。flag可省略。

    s_cli_socket.send(string, flag):服务器接收连接后,向客户端发送数据。string可以为空。

    sk.sendall(string, flag):向客户端发送全部数据。内部递归调用send(),成功返回None,失败抛出异常

    sk.sendto(string[,flag],address):将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地

    址。返回值是发送的字节数。该函数主要用于UDP协议。

    sk.settimeout(timeout):设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时

    期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

    sk.getpeername():返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。

    sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)

    sk.fileno():套接字的文件描述符

    se_socket.setsockopt(level, optname, value):设置给定套接字选项的值。level定义那个选项将被使用,通常为

    SOL_SOCKET(正在使用的socket选项);当level=SOL_SOCK时,optname为下列值:

    选项 定义
    SO_BINDTODEVICE 可以使socket只在某个特殊的网络接口(网卡)有效。也许不能是移动便携设备 一个字符串给出设备的名称或者一个空字符串返回默认值
    SO_BROADCAST 允许广播地址发送和接收信息包。只对UDP有效。如何发送和接收广播信息包 布尔型整数
    SO_DONTROUTE 禁止通过路由器和网关往外发送信息包。这主要是为了安全而用在以太网上UDP通信的一种方法。不管目的地址使用什么IP地址,都可以防止数据离开本地网络 布尔型整数
    SO_KEEPALIVE 可以使TCP通信的信息包保持连续性。这些信息包可以在没有信息传输的时候,使通信的双方确定连接是保持的 布尔型整数
    SO_OOBINLINE 可以把收到的不正常数据看成是正常的数据,也就是说会通过一个标准的对recv()的调用来接收这些数据 布尔型整数
    SO_REUSEADDR 当socket关闭后,本地端用于该socket的端口号立刻就可以被重用。通常来说,只有经过系统定义一段时间后,才能被重用。 布尔型整数

    ser_socket.getsockopt(level, optname, [buflen]):返回套接字选项的值(bytes)。

    ser_socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None, newline=None):创建一个与该套接字相关联的文件,且该套接字必须处于阻塞模式,mode取值与内置的open()函数相同。

     

  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/yblackd/p/11663451.html
Copyright © 2011-2022 走看看