异常处理+命令行解析库argparse
Socket.error 与一般I/O和通信问题有关的
Socket.gaierror 与查询地址有关的
Socket.herror 与其他地址错误有关
Socket.timeout 与一个socket上调用settimeout()后,超时处理有关
#-*- coding:utf-8 -*- import sys import socket import argparse #通过命令行输入参数 python 1_7_socket_errors.py --host=www.python.org --port=8080 --file=1_7_socket_errors.py #也可直接指定host和port,运行。 def main(): #创建一个解析器 parser = argparse.ArgumentParser(description = "Socket Error") #添加参数选项 parser.add_argument('--host',action="store",dest="host",required=False) parser.add_argument('--port',action="store",dest="port",required=False,type=int) parser.add_argument('--file',action="store",dest="file",required=False) #调用parse_args()方法进行解析 given_args = parser.parse_args() host = given_args.host port = given_args.port #也可以自己指定port,host #host = "www.python.org" #port = 80 filename = given_args.file #处理创建套接字异常 try: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) except socket.error,e: print "Error creating socket:%s"%e sys.exit(1) #处理连接套接字异常 try: s.connect((host,port)) except socket.gaierror,e: print"Address-related error connecting to server:%s"%e sys.exit(1) except socket.error,e: print"Connection error:%s"%e sys.exit() #处理发送数据错误 try: #GET方法 发送到网网站 s.sendall("GET %s HTTP/1.0\r\n\r\n"%filename) except socket.error,e: print"Error sending data:%s"%e sys.exit(1) while 1: try: #接受网站给返回的数据 buf = s.recv(2048) except socket.error,e: print"Error receiving data:%s"%e sys.exit(1) if not len(buf): break #将buf数据发送到命令行中 sys.stdout.write(buf) if __name__ == "__main__": main()
时间: 2024-10-26 17:15:27