python 网络编程 (二)---异常
异常
python的socket模块实际上定义了4种可能出现的异常:
1)与一般I/O 和通信问题有关的socket.error;
2)与查询地址信息有关的socket.gaierror;
3)与其他地址错误有关的socket.herror;
4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout;
import socket, sys, time host = sys.argv[1]
textport = sys.argv[2]
filename = sys.argv[3] #创建socket对象
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, e:
print 'Strange error creating socket:%s' % e
sys.exit(1) #创建端口号
try:
port = int(textport)
except ValueError:
try:
port = socket.getservbyname(textport, 'tcp')
except socket.error, e:
print 'Couldn not find your port:%s' % e
sys.exit(1) #连接socket
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(1) fd = s.makefile('rw', 0) #使用文件类对象
print 'sleeping...'
time.sleep(10) #线程休息10S
print 'Continuing...' try:
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) try:
fd.flush()
except socket.error, e:
print 'Error sending data: %s' % e
sys.exit(1) try:
s.shutdown(1)
s.close()
except socket.error, e:
print 'Error sending data:%s' % e while True:
try:
buf = fd.read(2048)
except socket.error, e:
print 'Error receiving data:%s' % e
sys.exit(1)
if not len(buf):
break
sys.stdout.write(buf)
另外,数据只有在您调用了shutdown()函数后才能确保被发送。
try:
s.shutdown(1)
s.close()
except socket.error, e:
print 'Error sending data:%s' % e
flush()调用,从技术层面来看,因为makefile()的调用聪明的没有地址缓冲器(buffer),所以这个调用并不是必须的,但是如果因为某个原因而使用了缓冲器,则需要调用。
try:
fd.flush()
except socket.error, e:
print 'Error sending data: %s' % e
sys.exit(1)
python 网络编程 (二)---异常的更多相关文章
- Python学习笔记【第十四篇】:Python网络编程二黏包问题、socketserver、验证合法性
TCP/IP网络通讯粘包问题 案例:模拟执行shell命令,服务器返回相应的类容.发送指令的客户端容错率暂无考虑,按照正确的指令发送即可. 服务端代码 # -*- coding: utf- -*- # ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- python 网络编程:socket(二)
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
- 图解Python网络编程
返回目录 本篇索引 (1)基本原理 (2)socket模块 (3)select模块 (4)asyncore模块 (5)asynchat模块 (6)socketserver模块 (1)基本原理 本篇指的 ...
- Python 网络编程(一)
Python 网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- Python 网络编程相关知识学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python网络编程应用(一)
在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
随机推荐
- linux命令useradd添加用户详解
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s shell] [-c comment] [ ...
- Matlab中添加搜索目录
一.问题来源 来自于一份大规模hash图像检索代码. 二.问题解析 2.1 添加目录 addpath('./utils/'); 2.2 添加目录及其子目录 addpath(genpath('./uti ...
- ural 1108
大数乘法 不会java 比赛的时候各种细节RE WA ........ #include <cstdio> #include <cstring> #include ...
- DLL搜索路径和DLL劫持
DLL搜索路径和DLL劫持 环境:XP SP3 VS2005 作者:magictong 为什么要把DLL搜索路径(DLL ORDER)和DLL劫持(DLL Hajack)拿到一起讲呢?呵呵,其实没啥深 ...
- android dialog点击其他区域消失
只需调用dialog对象的setCanceledOnTouchOutside方法,传入参数为true即可. 如下代码实现: //点击其他区域dialog消失 menuDialog.setCancele ...
- java 布尔值一种赋值方法
在研读jmeter的代码时发现一个很常见的布尔值赋值方式,记录下来备忘: public static void main(String[] args) { // TODO Auto-generated ...
- Qt之高级网络操作(HTTP/FTP快速上手)Qt之QHttpPart和QHttpMultiPart
http://blog.csdn.net/u011012932/article/details/52535755 http://blog.csdn.net/u011012932/article/det ...
- Android:控件的对象修改控件的值
TextView private TextView textView; ... textView =(TextView)findViewById(R.id.textView); textView.se ...
- 算法总结之欧拉函数&中国剩余定理
算法总结之欧拉函数&中国剩余定理 1.欧拉函数 概念:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)( ...
- Python之模块篇
简介 你已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个包含了所有你定义的函数和变量的 ...