在《Python中套接字实现客户端和服务端3-3》中提到,客户端可以通过connect()方法连接服务端,而连接成功的前提是服务端在必须客户端连接之前就要等待连接。
1 当客户端连接时,服务端没有打开
如果客户端连接服务端时,服务端并没有打开,此时客户端程序就会报错。报错信息如图1所示。
图1 连接服务端时程序报错
因为当客户端连接服务端时,服务端没有打开,报错信息中的“ConnectionResusedError”表示“连接被拒绝的错误”的异常类。
2 加入异常处理
可以在客户端中加入对ConnectionResusedError异常的处理代码。
图2 加入异常处理代码
在以上代码中,当客户端连接服务端时,如果服务端没有打开,则会显示“Connection is refused by server.”,如果成功连接了服务端,则会显示“Connection is accepted by server.”。
相关链接1 Python的中异常处理相关知识,请参考
Python中的异常处理4-1-CSDN博客
Python中的异常处理4-2_棉猴的博客-CSDN博客
Python中的异常处理4-3_棉猴的博客-CSDN博客
Python中异常处理4-4-CSDN博客
3 加入while循环
当服务端没有开启时,以上代码虽然没有报错,但是不能再次连接服务器。因此,可以通过while循环多次连接服务端,代码如图3所示。
图3 多次连接服务端代码
其中,变量going是循环的标志,初始值是True,当成功连接了服务端,则将该值设置为False,循环结束;如果没有成功连接,则使用time.sleep()在指定时间间隔后,再次连接服务端,直到成功连接未知。运行效果如图4所示。
图4 代码运行效果
当运行客户端时,如果服务端此时并没有打开,则客户端会再次连接服务端,直到服务端打开,显示连接成功。