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()函数相同。

     

  • 相关阅读:
    Delphi代码获取网卡物理地址三种方法 本文来自Delphi之窗,原文地址:http://www.52delphi.com...
    SQL SERVER 中实现公历到农历的转换
    cxgrid相同列合并显示
    rzCheckList.ItemChecked[Index]就可以判断指定节点地状态.
    为什么PING域名得到IP与实际公网IP不符
    如何让sql server2005和sql server2000共存安装在同一机器上
    如何编译通过 Raize 5.3 中的 RzBorder.pas
    u6升级到u890的过程
    技术部门到底该如何管理才能“和谐”
    在CXGRID中如何让字段能以0.00的格式显示
  • 原文地址:https://www.cnblogs.com/yblackd/p/11663451.html
Copyright © 2011-2022 走看看