Python网络编程——处理套接字错误
2016-09-21 21:58
253 查看
在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应。
Python的Socket库提供了一个方法,能通过socket。error异常优雅地处理套接字错误。
1. 代码及相关解释
Python的Socket库提供了一个方法,能通过socket。error异常优雅地处理套接字错误。
1. 代码及相关解释
# ! /usr/bin/env python # -*- coding: utf-8 -*- # 处理套接字错误 import argparse # python用于解析命令行参数和选项的标准模块 import sys import socket # 定义main_errors()类 def main_errors(): # 创建一个解析对象,其中描述为"Socket Error Examples" # ArgumentParser(self, prog=None, usage=None, description=None, epilog=None, # version=None, parents=[], formatter_class=HelpFormatter, prefix_chars='-', # fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', # add_help=True) # Keyword Arguments: # - prog -- The name of the program (default: sys.argv[0]) # - usage -- A usage message (default: auto-generated from arguments) # - description -- A description of what the program does # - epilog -- Text following the argument descriptions # - parents -- Parsers whose arguments should be copied into this one # - formatter_class -- HelpFormatter class for printing help messages # - prefix_chars -- Characters that prefix optional arguments # - fromfile_prefix_chars -- Characters that prefix files containing additional arguments # - argument_default -- The default value for all arguments # - conflict_handler -- String indicating how to handle conflicts # - add_help -- Add a -h/-help option parser = argparse.ArgumentParser(description='Socket Error Examples') # 采用add_argument方法,add_argument(name or flags…[, action][, nargs][, const] # [, default][, type][, choices][, required][, help][, metavar][, dest]) # name or flags —— 必须的参数,该参数接收选项参数或者是位置参数 # action: # (1)store —— 默认action模式,储存值到指定变量 # (2)store_const —— 储存值在参数的const部分指定,多用于实现非布尔的命令行flag # (3)store_true/store_false —— 布尔开关。可以2个参数对应一个变量 # (4)append —— 储存值到列表,储存值在参数的const部分指定 # (5)append_const —— 储存值到列表,储存值在参数的const部分指定 # (6)version —— 输出版本信息然后退出 # nargs —— 指定接受多个或者0个参数 # const —— 配合action="store_const|append_const"使用,默认值 # default —— 设置参数的默认值 # type —— 把从命名行输入的结果转成设置的类型,通常用来检查值的范围,以及合法性。默认string # choices —— 检查输入参数的范围 # required —— 指定某个选项在命名中出现, 默认False, 若为 True, 表示必须输入该参数 # help —— 参数描述 # metavar —— 用于help信息输出 # dest —— 把位置或者选项关联到一个特定的名字 # http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=21633169&id=4387657 参数详解 parser.add_argument('--host', action='store', dest='host', required=False) parser.add_argument('--port', action='store', dest='port', required=False) parser.add_argument('--file', action='store', dest='file', required=False) # 调用parse_args()方法进行解析 # def parse_args(self, args=None, namespace=None): # args, argv = self.parse_known_args(args, namespace) # if argv: # msg = _('unrecognized arguments: %s') # self.error(msg % ' '.join(argv)) # return args given_args = parser.parse_args() host = given_args.host port = given_args.port filename = given_args.file # First try-except block -- create socket # 处理创建套接字异常 try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as e: print("Error creating socket: %s" % e) sys.exit(1) # Second try-except block -- connect to giver host/port # 处理连接套接字异常 try: s.connect((host, port)) except socket.gaierror as e: print("Address-related error connecting to server: %s" % e) sys.exit(1) # Third try-except block -- sending data # 处理发送数据错误 try: # GET方法 发送到网站 data = "GET %s HTTP/1.0\r\n\r\n" % filename s.sendall(data.encode()) except socket.error as e: print("Error sending data: %s" % e) sys.exit(1) while 1: try: # 接收网站返回的数据 buf = s.recv(2048) except socket.error as e: print("Error receiving data: %s" % e) sys.exit() if not len(buf): break # 将buf数据发送到命令行中 sys.stdout.write(str(buf)) if __name__ == '__main__': main_errors()
相关文章推荐
- python之优雅处理套接字错误
- Python进阶 错误处理
- 套接字的recv返回错误和处理
- python与sqlite处理中文字符时出现的编码错误问题解决
- python matplotlib 安装 和错误处理
- 【python coding 3:字符串处理】python实现去除字符串中的错误
- ASP.NET DEVELOPMENT SERVER 未能开始侦听端口xxxxx以一种访问权限不允许的方式做了一个访问套接字的尝试--错误处理
- python错误处理详解
- [Head First Python]3. 文件与异常:处理错误
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- Python学习-17.Python中的错误处理(二)
- Python编码错误处理
- python处理字符串时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- python3.3 django错误处理“sre_constants.error: nothing to repeat”
- python处理字符串时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- python 处理中文时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
- python xml处理中文时出现的错误
- 请求错误[Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- Python错误处理-ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MO
- Python学习-18.Python中的错误处理(三)