加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Python 特技 —— TCP 处事器与客户端

发布时间:2019-08-29 03:31:17 所属栏目:业界 来源:ciphersaw
导读:0x00 媒介 本文先先容因特网的焦点协议 TCP ,再以 Python 的 socket 模块为例先容收集套接字,最后给出 TCP 处事器与客户端的 Python 剧本,并演示两者之间的通讯进程。 0x01 TCP 协议 TCP(Transmission Control Protocol,传输节制协议)是一种面向毗连、

全部支持收集通讯的编程说话都各自提供了一套 socket API,下面以 Python 3 为例,讲授处事器与客户端成立 TCP 通讯毗连的交互进程:

Python 特技 —— TCP 处事器与客户端

Python 特技 —— TCP 处事器与客户端

脑海中先对上述进程发生必然印象后,更易于领略下面两节 TCP 处事器与客户端的 Python 实现。

0x03 TCP 处事器

  1. #!/usr/bin/env python3 
  2. # -*- coding: utf-8 -*- 
  3. #公家号:python进修开拓 
  4. import socket 
  5. import threading 
  6. def tcplink(conn, addr): 
  7.     print("Accept new connection from %s:%s" % addr) 
  8.     conn.send(b"Welcome!n") 
  9.     while True: 
  10.         conn.send(b"What's your name?") 
  11.         data = conn.recv(1024) 
  12.         if data == b"exit": 
  13.             conn.send(b"Good bye!n") 
  14.             break 
  15.         conn.send(b"Hello %s!n" % data) 
  16.     conn.close() 
  17.     print("Connection from %s:%s is closed" % addr) 
  18. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  19. s.bind(("127.0.0.1", 6000)) 
  20. s.listen(5) 
  21. print("Waiting for connection...") 
  22. while True: 
  23.     conn, addr = s.accept() 
  24.     t = threading.Thread(target = tcplink, args = (conn, addr)) 
  25.     t.start() 
  • Line 6:界说一个 tcplink() 函数,第一个 conn 参数为处事器与客户端交互数据的套接字工具,第二个 addr 参数为客户端的 IP 地点与端标语,用二元组 (host, port) 暗示。
  • Line 8:毗连乐成后,向客户端发送接待信息 b"Welcome!n"。
  • Line 9:进入与客户端交互数据的轮回阶段。
  • Line 10:向客户端发送扣问信息 b"What's your name?"。
  • Line 11:吸取客户端发来的 bytes 工具。
  • Line 12:若 bytes 工具为 b"exit",则向客户端发送竣事相应信息 b"Good bye!n",并竣事与客户端交互数据的轮回阶段。
  • Line 15:若 bytes 工具不为 b"exit",则向客户端发送问候相应信息 b"Hello %s!n",个中 %s 是客户端发来的 bytes 工具。
  • Line 16:封锁套接字,不再向客户端发送数据。
  • Line 19:建设 socket 工具,第一个参数为 socket.AF_INET,代表回收 IPv4 协议用于收集通讯,第二个参数为 socket.SOCK_STREAM,代表回收 TCP 协议用于面向毗连的收集通讯。
  • Line 20:向 socket 工具绑定处事器主机地点 (“127.0.0.1”, 6000),即当田主机的 TCP 6000 端口。
  • Line 21:开启 socket 工具的监听成果,守候客户端的毗连哀求。
  • Line 24:进入监听客户端毗连哀求的轮回阶段。
  • Line 25:吸取客户端的毗连哀求,并得到与客户端交互数据的套接字工具 conn 与客户端的 IP 地点与端标语 addr,个中 addr 为二元组 (host, port)。
  • Line 26:操作多线程技能,为每个哀求毗连的 TCP 客户端建设一个新线程,实现了一台处事器同时与多台客户端举办通讯的成果。
  • Line 27:开启新线程的勾当。

0x04 TCP 客户端

  1. #!/usr/bin/env python3 
  2. # -*- coding: utf-8 -*- 
  3. #公家号:python进修开拓 
  4.  
  5. import socket 
  6. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
  7. s.connect(("127.0.0.1", 6000)) 
  8. print(s.recv(1024).decode()) 
  9. data = "client" 
  10. while True: 
  11.     if data: 
  12.         print(s.recv(1024).decode()) 
  13.     data = input("Please input your name: ") 
  14.     if not data: 
  15.         continue 
  16.     s.send(data.encode()) 
  17.     print(s.recv(1024).decode()) 
  18.     if data == "exit": 
  19.         break 
  20. s.close() 
  • Line 5:建设 socket 工具,第一个参数为 socket.AF_INET,代表回收 IPv4 协议用于收集通讯,第二个参数为 socket.SOCK_STREAM,代表回收 TCP 协议用于面向毗连的收集通讯。
  • Line 6:向 (“127.0.0.1”, 6000) 主机提倡毗连哀求,即当田主机的 TCP 6000 端口。
  • Line 7:毗连乐成后,吸取处事器发来的接待信息 b"Welcome!n",并转换为字符串后打印输出。
  • Line 9:建设一个非空字符串变量 data,并赋初值为 "client"(只要长短空字符串即可),用于判定是否吸取来自处事器发来的扣问信息 b"What's your name?"。
  • Line 10:进入与处事器交互数据的轮回阶段。
  • Line 11:当变量 data 非空时,则吸取处事器发来的扣问信息。
  • Line 13:要求用户输入名字。
  • Line 14:当用户的输入为空时,则从头开始轮回,要求用户从头输入。
  • Line 16:当用户的输入非空时,则将字符串转换为 bytes 工具后发送至处事器。
  • Line 17:吸取处事器的相应数据,并将相应的 bytes 工具转换为字符串后打印输出。
  • Line 18:当用户的输入为 "exit" 时,则终止与处事器交互数据的轮回阶段,即将封锁套接字。
  • Line 21:封锁套接字,不再向处事器发送数据。

0x05 TCP 历程间通讯

将 TCP 处事器与客户端的脚天职别定名为 tcp_server.py 与 tcp_client.py,然后存至桌面,笔者将在 Windows 10 体系下用 PowerShell 举办演示。

小贴士:读者举办复现时,要确保本机已安装 Python 3,留意笔者已将默认的启动路径名 python 改为了 python3。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读