Python 绝技 —— TCP 服务器与客户端
listen() 函数用于 TCP 处事器开启套接字的监听成果。函数原型如下:
connect() 函数 connect() 函数用于 TCP 客户端向 TCP 处事器提倡毗连哀求。函数原型如下:
address 参数代表套接字要毗连的地点,其名目取决于套接字的 family 参数。若 family 参数为 AF_INET,则 address 参数暗示为二元组 (host, port),个中 host 是用字符串暗示的主机地点,port 是用整型暗示的端标语。 accept() 函数 accept() 函数用于 TCP 处事器接管 TCP 客户端的毗连哀求。函数原型如下:
accept() 函数的返回值是二元组 (conn, address),个中 conn 是处事器用来与客户端交互数据的套接字工具,address 是客户端的 IP 地点与端标语,用二元组 (host, port) 暗示。 send() 函数 send() 函数用于向长途套接字工具发送数据。留意,本机套接字必需与长途套接字乐成毗连后才气行使该函数,不然会报错。可见,send() 函数只能用于 TCP 历程间通讯,而对付 UDP 历程间通讯应该用 sendto() 函数。函数原型如下:
bytes 参数代表即将发送的 bytes 工具数据。譬喻,对付字符串 "hello world!" 而言,必要用 encode() 函数转换为 bytes 工具 b"hello world!" 才气举办收集传输。 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 做成了的参考索引,有助于领略实现进程。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |