zoukankan      html  css  js  c++  java
  • socket模块其他用法

    1.socket模块的其他方法

    服务端套接字函数
    s.bind()    绑定(主机,端口号)到套接字
    s.listen()  开始TCP监听
    s.accept()  被动接受TCP客户的连接,(阻塞式)等待连接的到来
    
    客户端套接字函数
    s.connect()     主动初始化TCP服务器连接
    s.connect_ex()  connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
    
    公共用途的套接字函数
    s.recv()            接收TCP数据
    s.send()            发送TCP数据
    s.sendall()         发送TCP数据
    s.recvfrom()        接收UDP数据
    s.sendto()          发送UDP数据
    s.getpeername()     连接到当前套接字的远端的地址
    s.getsockname()     当前套接字的地址
    s.getsockopt()      返回指定套接字的参数
    s.setsockopt()      设置指定套接字的参数
    s.close()           关闭套接字
    
    面向锁的套接字方法
    s.setblocking()     设置套接字的阻塞与非阻塞模式
    s.settimeout()      设置阻塞套接字操作的超时时间
    s.gettimeout()      得到阻塞套接字操作的超时时间
    
    面向文件的套接字的函数
    s.fileno()          套接字的文件描述符
    s.makefile()        创建一个与该套接字相关的文件

    连接时的套接字方法
    s.settimeout(4) 设置等待超时时间,运行到accept时不会瞬间报错,而是会等待4秒等待客户端连接
    s.gettimeout() 查询等待了用户多长时间连接
    s.setblocking(False) 设置accept和recv两个方法的阻塞和非阻塞状态
    #settimeout的用法,在一定时间内判断客户端是否超时
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',8090))
    sk.listen()
    sk.settimeout(4)#四秒后没有客户端连接,报错超时
    #如果我不运行上面的代码,程序会一直停留在这等待客户连接
    
    coon,addr = sk.accept()
    
    print(sk.gettimeout())#得到上面settimeout设置的值
    sk.settimeout(4)
    mes = coon.recv(1024)
    print(mes)
    coon.close()
    sk.close()

    2.socket模块中send和sendall的区别

    • send也有返回值,返回的结果是读取了发送内容的多少字节
    • 在Python解释器中,send发送时会自动帮你切分发送,而sendall一次性发送到缓冲区
    sock.sendall('Hello world
    ')
    
    #这两段代码等价,sendall内部就是调用的send
    buffer = 'Hello world
    '
    while buffer:
        bytes = sock.send(buffer)
        buffer = buffer[bytes:]

    3.sockeserver实现tcp允许多个用户连接

    1)在这里先介绍一个点

    • 有时候操作系统会运行的比较慢,造成你再用这个套接字的端口时,会刷新不过来
    • 一般会在重启服务器时可能会遇到[Winerror 10048]通常套接字地址只允许使用一次

    解决方案:

    import socket
    from socket import SOL_SOCKET,SO_REUSEADDR
    sk = socket.socket()
    sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
    #在bind前面加这句话
    sk.bind(('127.0.0.1',8090))

    2)socketserver模块为内置模块

  • 相关阅读:
    xmpp学习笔记(二)
    xmpp学习笔记(一)
    【转】JavaScript 简史
    【转】JavaScript 中值得注意的 for 循环
    让你少走弯路的搭建树莓派的Net与NodeJS运行环境
    【转】最流行的编程语言JavaScript能做什么?
    【转】闭包会造成内存泄漏吗?
    【转】主流浏览器内核介绍
    【转】JVM 架构解读
    【转】你所不知道的HTML <head/> 头标签
  • 原文地址:https://www.cnblogs.com/0627zhou/p/9501130.html
Copyright © 2011-2022 走看看