Pyhton学习笔记——socket异常处理

  一个健壮的程序应该有完善的对于异常中断的处理功能,那么在socket编程中常见的异常有哪些,该如何处理呢?

    我们知道socket通信的进行,无非就是绑定主机,端口,监听,接收连接,发送接收数据等等,这些行为如果出错,系统都会返回错误的,为了使得我们的程序有错误检查的功能,我们可以在程序内部加入异常处理,使程序运行到错误处就中断程序运行并打印出出错的地方和具体错误,使程序变得友好。

Socket模块常见的异常有:

Socket.error 与一般I/O和通信问题有关的

Socket.gaierror 与查询地址有关的

Socket.herror 与其他地址错误有关

Socket.timeout 与一个socket上调用settimeout()后,超时处理有关

 

   举2个常见错误的例子:其中socket.error比较常见

1 socket.error

import socket

try:

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

except socket.error,e:

print 'Strange error creating socket:%s' %e

创建套接字,接收发送信息数据时候的异常一般由socket.error来处理   

 2  scoket.gaierror 错误

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.connect(('wang',71625))

 

Traceback (most recent call last):

  File "<pyshell#6>", line 1, in <module>

    s.connect(('wang',71625))

  File "<string>", line 1, in connect

gaierror: (11001, 'getaddrinfo failed')

    这里我们尝试连接一个主机,但是返回了错误。但是不能连接错误代码数字会有不同,我们可以加入下面的代码。

import socket,sys

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

try:

    s.connect(('wang',71625))

except socket.gaierror,e:

print 'Error connecting to server: %s' % e

结果为:

>>>

Error connecting to server: (11001, 'getaddrinfo failed')

>>> 

      

 

     我们知道,服务器要力求稳定,所以如果一个服务器存在没有被捕获的异常,那么这个异常将会终止您的程序,这是非常不好的,特别是对于接受服务的客户端来说是不可以接受的,所以一个服务器端应该能试图捕获所有可能的错误,并以一种保证不会终止服务器的方法来处理这些错误,

下面演示了一个服务器端得例子

import socket,traceback

 

host=''

port=51423

 

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.setsockopt((socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

s.bind((host,port))

s.listen(1)

 

while 1:

  try:

         clientsock,clientaddr=s.accept()

  except KeyboardInterrupt:

         raise

  except:

         traceback.print_exc()

         continue

  #Process the connection

 

  try:

         print "Got connection from",clientsock.getpeername()

         #Process the request here

  except (KeyboardInterrupt,SystemExit):

         raise

  except:

         traceback.print_exc()

  #close the connection

 

  try:

         clientsock.close()

  except KeyboardInterrupt:

         raise

  except:

         traceback.print_exc()

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值