TCP服务器端开发七步走(面向对象版)
1、描述
TCP服务器端开发七步走:① 创建服务器端套接字对象 ② 绑定IP和端口 ③ 开始监听 ④ 接收客户端连接请求 ⑤ 接收数据 ⑥ 发送数据 ⑦ 关闭套接字对象
2、代码
(1)代码分析:
通过面向对象开发 => 分析有哪些对象 => 创建类 => 属性和方法
服务器端对象 => 服务器端类
import socket
# 第一步:创建WebServer类(准备连接客户端之前需要进行的操作)
class WebServer(object):
# 第四步:定义魔术方法__init__()
def __init__(self):
# ①创建服务器端套接字对象(应将其当做属性来处理,所以用self.属性来进行应用。)
self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ②绑定IP和端口号
self.tcp_server_socket.bind(('', 8000)) # 注意其参数是元祖类型
# ③设置监听
self.tcp_server_socket.listen(128)
# 第五步: 定义一个start()方法 => 接收客户器端连接
def Start(self):
# ④接收客户器端连接(允许多个客户端同时连接)
while True:
new_socket, ip_port = self.tcp_server_socket.accept() # accept()方法相当于input其具有暂停的功能
# ⑤接收客户端发送过来的信息
content = new_socket.recv(1024).decode('gbk')
print((f'{ip_port}客户端发送过来的数据:{content}'))
# ⑥返回数据给客户端(相应数据)
data = input("请输入您要回复的内容:")
new_socket.send(data.encode('gbk'))
new_socket.close()
# 第二步:实例化对象,调用__init__()初始化方法
ws = WebServer()
# 第三步:启动服务,接收客户端连接
ws.Start()
(2)结果演示:
服务器端:
客户端:
(3)遗留问题分析:
① 整个程序其实目前位置只能接收一个客户端,接收其他客户端,必须等待上一个连接结束,才可以继续连接发送接收数据,因为我们目前编写的程序都是单进程!一个Python只能处理一个连接请求!
如何期望服务器端,可以同时处理多个客户端请求,怎么办呢?答:使用多任务编程
② 第七步要去掉:tcp_server_socket.close()
因为:服务器端的套接字主要是用来接收客户端连接的,将其关掉客户端就连接不上了
不然相当于下图的线断开了