1.socket模块的其他方法

  1. 服务端套接字函数
  2. s.bind() 绑定(主机,端口号)到套接字
  3. s.listen() 开始TCP监听
  4. s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来
  5.  
  6. 客户端套接字函数
  7. s.connect() 主动初始化TCP服务器连接
  8. s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
  9.  
  10. 公共用途的套接字函数
  11. s.recv() 接收TCP数据
  12. s.send() 发送TCP数据
  13. s.sendall() 发送TCP数据
  14. s.recvfrom() 接收UDP数据
  15. s.sendto() 发送UDP数据
  16. s.getpeername() 连接到当前套接字的远端的地址
  17. s.getsockname() 当前套接字的地址
  18. s.getsockopt() 返回指定套接字的参数
  19. s.setsockopt() 设置指定套接字的参数
  20. s.close() 关闭套接字
  21.  
  22. 面向锁的套接字方法
  23. s.setblocking() 设置套接字的阻塞与非阻塞模式
  24. s.settimeout() 设置阻塞套接字操作的超时时间
  25. s.gettimeout() 得到阻塞套接字操作的超时时间
  26.  
  27. 面向文件的套接字的函数
  28. s.fileno() 套接字的文件描述符
  29. s.makefile() 创建一个与该套接字相关的文件
  30.  
  31. 连接时的套接字方法
    s.settimeout(4) 设置等待超时时间,运行到accept时不会瞬间报错,而是会等待4秒等待客户端连接
    s.gettimeout() 查询等待了用户多长时间连接
    s.setblocking(False) 设置acceptrecv两个方法的阻塞和非阻塞状态
  1. #settimeout的用法,在一定时间内判断客户端是否超时
  2. import socket
  3. sk = socket.socket()
  4. sk.bind(('127.0.0.1',8090))
  5. sk.listen()
  6. sk.settimeout(4)#四秒后没有客户端连接,报错超时
  7. #如果我不运行上面的代码,程序会一直停留在这等待客户连接
  8.  
  9. coon,addr = sk.accept()
  10.  
  11. print(sk.gettimeout())#得到上面settimeout设置的值
  12. sk.settimeout(4)
  13. mes = coon.recv(1024)
  14. print(mes)
  15. coon.close()
  16. sk.close()

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

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

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

1)在这里先介绍一个点

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

解决方案:

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

2)socketserver模块为内置模块

socket模块其他用法的更多相关文章

  1. 百万年薪python之路 -- socket()模块的用法

    socket()模块的用法: import socket socket.socket(socket_family,socket_type,protocal=0) socket_family 可以是 A ...

  2. 网络编程---socket模块

    内容中代码都是先写  server端, 再写 client端 1 TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效 ...

  3. 网络编程------socketserver模块以及socket模块的更多用法.

    socketserver模块 内置模块 (其实现原理为并发) socketserver这个模块主要是为了解决: TCP协议中,服务器不能同时连接多个客户端的问题 是处于socket抽象层和应用层之间的 ...

  4. socket编程--socket模块介绍

    socket也称作'套接字,用于描述IP地址和端口,是一个通信的终点. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写] ...

  5. Python中的socket 模块

    Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...

  6. Python网络编程(2)——socket模块(2)

    目录: 1. 异常 2. 地址族 3. 套接字类型 4. 模块方法 5. Socket对象与实例方法 socket模块提供了Python中的低层网络连接接口,用于操作套接字操作. 异常 socket模 ...

  7. 第五十五节,IO多路复用select模块加socket模块,伪多线并发

    IO多路复用select模块加socket模块,伪多线并发,并不是真正的多线程并发,实际通过循环等待还是一个一个处理的 IO多路复用,lo就是文件或数据的输入输出,IO多路复用就是可以多用户操作 IO ...

  8. 第五十三节,socket模块介绍,socket单线程通讯

    socket单线程通讯,只能单线程通讯,不能并发 socket是基于(TCP.UDP.IP)的通讯.也叫做套接字 通讯过程由服务端的socket处理信息发送,由客户端的socket处理信息接收. so ...

  9. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

随机推荐

  1. 快速生成500W测试数据库

    快速生成500W测试数据库: 创建测试表: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_ ...

  2. 从零开始学习GDI+ (二) 基本概念与基本操作

    从零开始学习GDI+ (一)我的第一个GDI+程序 上文给新手学习GDI+讲述了vs环境等的准备工作,并且可以直接用GDI+绘图了.本文开始,讲述的可能偏理论,建议学习的过程中大胆尝试,多使用API. ...

  3. [转帖]预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响

    预警 | Linux 爆“SACK Panic”远程DoS漏洞,大量主机受影响   https://cloud.tencent.com/developer/article/1447879 所有的 版本 ...

  4. MySQL -2- 体系结构--随笔小记

    简介与安装NoSQLRDBMS版本安装方式二进制安装,源码安装体系结构CS模型TCP/IPsocketmysql master thread 实例mysqld 的程序构成连接层 协议.验证.链接线程S ...

  5. MyEclipse 2013 破解

    本文链接:https://blog.csdn.net/Jayliue/article/details/97414181 1.运行cracker.jar 用 cd 命令找到 cracker.jar所在目 ...

  6. Java计算两个时间的天数差与月数差 LocalDateTime

    /**  * 计算两个时间点的天数差  * @param dt1 第一个时间点  * @param dt2 第二个时间点  * @return int,即要计算的天数差  */ public stat ...

  7. springboot基于CORS处理跨域问题

    1. 为什么有跨域问题 跨域不一定都会有跨域问题. 因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有效的阻止跨站攻击. 因此:跨域问 ...

  8. java 线程池 - ThreadPoolExecutor

    1. 为什么要用线程池 减少资源的开销 减少了每次创建线程.销毁线程的开销. 提高响应速度 ,每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度. 提高线程的可管理性 ,线 ...

  9. KL散度的理解(GAN网络的优化)

    原文地址Count Bayesie 这篇文章是博客Count Bayesie上的文章Kullback-Leibler Divergence Explained 的学习笔记,原文对 KL散度 的概念诠释 ...

  10. 为Xcode配置Git和Github

    Xcode.Git和Github是三个伟大的编程工具.本文记录一下如何在Xcode中使用Git作为源代码控制工具,以及如何将本地的Git仓库和远程Github上的仓库集成起来. 1. 如何为新建的Xc ...