首页 > 其他分享 >套接字异常处理

套接字异常处理

时间:2024-02-02 18:55:24浏览次数:19  
标签:socket 错误 处理 sys connect error 接字 异常

套接字异常处理

网络环境中,我们的客户端和服务端可能会因为各种各样不可预测的网络环境而导致程序出现各式各样的错误,比如网线被拔了,服务器防火墙阻挡。又或者是套接字的属性设置错误,服务器/客户端套接字的初始化失败;这些都将会使我们的程序出现各种各样的异常;所以需要我们对程序的异常进行捕获,提高整个程序的健壮性

 

套接字初始化异常

import socket
import sys
try:
    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 套接字初始化异常
except soket.error as e:
    print('[E] Create socket fail')
    sys.exit(1) # 出现异常时 直接退出整个程序
 

服务器地址错误

import socket 
import sys
try:
    c.connect( ('192.168.162.123',8000) )
except socket.gaierror:  # 服务器地址出现问题
    print('[E] Fail to connect Addr')
    sys.exit(1)
 

服务器拒绝连接(IP及端口均有效情况下),IO错误

import socket,sys
…
try:
    c.connect( ('asdjal.com', 8080))
except socket.error:  #服务器拒绝连接
    print( '[E] Fail to connect Addr ' )
    sys.exit(1) 
try:
    c.send( data.encode() ) #发送消息错误
except socket.error:
    print(' [E] Error to send Data!' )
 

超时错误,设置套接字超时,或连接超过等待时间

c.settimeout(1) # 设置1秒连接不到则抛出超时错误
try:
    c.connect( ('192.168.162.123',8000) )
except socket.timeout as e:
    print('[E] time out')
    sys.exit(1)
  • 注意:超时错误也包含在 socket.error中,所以在捕获异常时,socket.timeout的优先级要比socket.error高,否则可能因为socket.error在前,socket.timeout异常捕获不会生效,会被socket.error在前面提前捕获

总结的来说,服务器的错误大致是以下几种

  • socket.gaierror:地址错误,错误的目标地址。
  • socket.timeout:超时错误,可以通过套接字的settimeout函数进行设置。
  • socket.error:IO错误,连接错误;发送数据或是connect时引发的错误

标签:socket,错误,处理,sys,connect,error,接字,异常
From: https://www.cnblogs.com/fire909090/p/18003678

相关文章

  • RTSP/Onvif协议视频平台EasyNVR激活码授权异常该如何解决
    由用户反馈,在其现场EasyNVR平台中,使用激活码方式授权时报错“没有权限操作”,如下图:1、由于此报错通常是非管理员(easynvr)操作时才会出现,但当前确实是easynvr登录的;2、于是技术人员比对了easynvr.db和easynvr.ini文件,查出数据库中的username是easynvr;3、但配置文件中的管理员名称为ad......
  • 批处理安装.net 8环境
    @echooff>nul2>&1"%SYSTEMROOT%\system32\cacls.exe""%SYSTEMROOT%\system32\config\system"if'%errorlevel%'NEQ'0'(echoRunasadministrator...gotoUACPrompt)else(gotogotAdmin)......
  • Linux——信号处理函数sigaction()
    sigaction()作用:设置某信号的信号处理函数1.sigaction()函数原型#include<signal.h>intsigaction( intsigno, conststructsigaction*restrictact, structsigaction*restrictoldact );12345signo:指定的信号,可以为除SIGKILL及SIGSTOP外的任何信号act:信号处理方式......
  • 已解决 -- 'swig'不是内部或外部命令,也不是可运行的程序或批处理文件
    最近在学强化学习的PPO算法,需要用到pipinstallbox2dbox2d--user这一指令,但需要下载并安装swighttps://www.swig.org/download.html  这是官网之后的步骤按照Win10下安装swig_windows10安装swig-CSDN博客就可以----------------------------------------------------......
  • Qt 调试器常见异常
    1.变量无提示信息,解决办法:工具->选项->调试器->概要->选中《当调试时在主编辑器中启用工具提示》2.CDB断点调试,解决无法查看QString值。运行至断点时,程序卡死。解决办法:打开“工具->选项->调试器->CDB”,把“UsePythondumper”选项勾选去掉,保存即可。3.CDB调试速度慢,解决办法如......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • vector<bool>的玄学问题及处理方法
    今天做题的时候搞范围循环,发现不能对vector数组元素引用。报错vector<bool>prev(26,false);for(bool&x:prev)x=true;[错误]非常量引用的初始值必须是左值这很反常识,因为其他元素的vector我都是用这样来操作元素的。同时我想到之前就遇到一个问题,无法直接......
  • js处理事件:异步处理事件与线程,使用队列按序执行,事件广播,事件bus,事件监听,变量监听,动态
    js处理事件:异步处理事件与线程,使用队列按序执行,事件广播,事件bus,事件监听,变量监听,动态执行,父子通信在Vue3中,你可以使用以下方法来处理异步事件、线程、队列执行、事件广播、事件总线、事件监听、变量监听、动态执行和父子通信:1.异步处理事件:可以使用async/await或Promise......
  • 每日一道Java面试题:说一说Java中的异常
    写在开头任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。老样子,用一段简单的代码开始今天的学习。我:“小二,上代码!”JavaBuild君:“好嘞!几位爷,里面请~”【代码示例1】//Java中经......
  • ADS1256读取到的24位有符号数据处理
    ADS1256通过SPI读取到的数据为24位有符号数据[0,23],第23位为符号位,1为负,0为正。但是在STM32中,我们常用int32或者uint32来存放这个数据,如果直接赋值赋过去就会出现意想不到的后果,如下:这就是直接赋值之后绘出来的图,因此我们需要将24为有符号变量转换为32位有符号变量,但在此处很容......