Python 绝技 —— TCP 服务器与客户端
flags 可选参数用于设置 send() 函数的特殊功能,默认值为 0,也可由一个或多个预定义值组成,用位或操作符 | 隔开。详情可参考 Unix 函数手册中的 send(2),flags 参数的常见取值有 MSG_OOB、MSG_EOR 、MSG_DONTROUTE等。 send() 函数的返回值是发送数据的字节数。 recv() 函数 recv() 函数用于从远程套接字对象接收数据。注意,与 send() 函数不同,recv() 函数既可用于 TCP 进程间通信,也能用于 UDP 进程间通信。函数原型如下:
bufsize 参数代表套接字可接收数据的最大字节数。注意,为了使硬件设备与网络传输更好地匹配,bufsize 参数的值最好设置为 2 的幂次方,例如 4096。 flags 可选参数用于设置 recv() 函数的特殊功能,默认值为 0,也可由一个或多个预定义值组成,用位或操作符 |隔开。详情可参考 Unix 函数手册中的 recv(2),flags 参数的常见取值有 MSG_OOB、MSG_PEEK、MSG_WAITALL 等。 recv() 函数的返回值是接收到的 bytes 对象数据。例如,接收到 bytes 对象 b"hello world!",最好用 decode() 函数转换为字符串 "hello world!" 再打印输出。 close() 函数 close() 函数用于关闭本地套接字对象,释放与该套接字连接的所有资源。
threading 模块 本节介绍上述代码中用到的内建模块 threading,是 Python 多线程的核心模块。 Thread() 类 Thread() 类可以创建线程对象,用于调用 start() 函数启动新线程。类原型如下:
创建完线程对象后,需使用对象的内置函数控制多线程活动。 start() 函数 start() 函数用于开启线程活动。函数原型如下:
注意,每个线程对象只能调用一次 start() 函数,否则会导致 RuntimeError 错误。 0x07 总结 本文介绍了 TCP 协议与 socket 编程的基础知识,再用 Python 3 实现并演示了 TCP 服务器与客户端的通信过程,其中还运用了简单的多线程技术,最后将脚本中涉及到的 Python API 做成了的参考索引,有助于理解实现过程。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |