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

Python 绝技 —— TCP 服务器与客户端

发布时间:2019-08-29 17:43:14 所属栏目:业界 来源:ciphersaw
导读:副标题#e# 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:开启新线程的活动。

(编辑:西安站长网)

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

热点阅读