如何用 Python 实现 TCP 的连接与通信?( 二 )


我们来看一下处理客户端请求的方法:
# 处理tcp连接def tcplink(conn, addr):print("Accept new connection from %s:%s" % addr)# 向客户端发送欢迎消息conn.send(b"Server: Welcome!n")while True:conn.send(b"Server: What's your name?")data = https://www.isolves.com/it/cxkf/yy/Python/2019-12-26/conn.recv(1024)# 如果客户端发送 exit 过来请求退出,结束循环if data == b"exit":conn.send(b"Server: Good bye!n")breakconn.send(b"Server: Hello %s!n" % data)# 关闭连接conn.close()print("Connection from %s:%s is closed" % addr) 
例子中,我们先想客户端发送欢迎消息,然后询问客户端名称,收到名称后发送欢迎消息,直到接收到客户端的 'exit' 命令,退出循环,关闭连接 。
实例我们把上面的分步讲解代码合并起来,形成一个可运行的实例 。
服务器端代码:
 
import socketimport threadingimport time# 处理tcp连接def tcplink(conn, addr):print("Accept new connection from %s:%s" % addr)# 向客户端发送欢迎消息conn.send(b"Server: Welcome!n")while True:conn.send(b"Server: What's your name?")data = https://www.isolves.com/it/cxkf/yy/Python/2019-12-26/conn.recv(1024)# 如果客户端发送 exit 过来请求退出,结束循环if data == b"exit":conn.send(b"Server: Good bye!n")breakconn.send(b"Server: Hello %s!n" % data)time.sleep(5)# 关闭连接conn.close()print("Connection from %s:%s is closed" % addr)# 创建 sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听端口s.bind(("127.0.0.1", 6000))# 设定等待连接的最大数量为5s.listen(5)print("Waiting for connection...")# 等待接收连接while True:# 接受一个新连接conn, addr = s.accept()# 创建新线程来处理TCP连接t = threading.Thread(target=tcplink, args=(conn, addr))t.start() 
客户端代码:
 
import socketimport time# 创建 sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立连接s.connect(("127.0.0.1", 6000))# 接收服务器消息print(s.recv(1024).decode())for data in [b'Michael', b'Tracy', b'Sarah']:# 发送数据s.send(data)time.sleep(2)# 打印接收到的数据print(s.recv(1024).decode('utf-8'))time.sleep(1)time.sleep(3)# 请求退出s.send(b'exit')time.sleep(2)print(s.recv(1024).decode('utf-8'))# 关闭连接s.close() 
注意,在代码中,我加入了一些休眠(sleep)操作,主要是为了控制台能够顺利打印出来,不然程序运行太快,打印顺序和内容有可能和预期不一样 。
先运行服务器端代码,然后再运行客户端代码,我们可以看到服务器端控制台打印内容如下:
#服务器端打印消息 Waitingforconnection... Acceptnewconnectionfrom127.0.0.1:53503 Connectionfrom127.0.0.1:53503isclosed 
客户端控制台打印内容如下:
 
#客户端打印消息 Server:Welcome!Server:What'syourname? Server:HelloMichael! Server:What'syourname? Server:HelloTracy! Server:What'syourname? Server:HelloSarah! Server:What'syourname? Server:Goodbye! 
大家可以对照着打印内容和代码,体会一下服务器端和客户端通信的原理 。
总结本文为大家介绍了 TCP 编程的基本原理和如何使用 Python 实现一个最简单的 TCP 通信过程 。通过介绍和实例,大家要在脑海中形成一个 TCP 通信的过程,熟悉了这个过程是处理后续复杂通信需求的基础 。更多python学习资料,可以关注“武汉千锋”微信公众号!




推荐阅读