码迷,mamicode.com
首页 > 编程语言 > 详细

python 网络编程 (二)---tcp

时间:2014-05-31 18:42:49      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:c   style   class   blog   code   java   

异常

python的socket模块实际上定义了4种可能出现的异常:

1)与一般I/O 和通信问题有关的socket.error;

2)与查询地址信息有关的socket.gaierror;

3)与其他地址错误有关的socket.herror;

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

bubuko.com,布布扣
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)
bubuko.com,布布扣

另外,数据只有在您调用了shutdown()函数后才能确保被发送。

bubuko.com,布布扣
try:  
    s.shutdown(1)  
    s.close()  
except socket.error, e:  
    print Error sending data:%s % e
bubuko.com,布布扣

flush()调用,从技术层面来看,因为makefile()的调用聪明的没有地址缓冲器(buffer),所以这个调用并不是必须的,但是如果因为某个原因而使用了缓冲器,则需要调用。

bubuko.com,布布扣
try:  
    fd.flush()  
except socket.error, e:  
    print Error sending data: %s % e  
    sys.exit(1)
bubuko.com,布布扣

python 网络编程 (二)---tcp,布布扣,bubuko.com

python 网络编程 (二)---tcp

标签:c   style   class   blog   code   java   

原文地址:http://www.cnblogs.com/menghuizuotian/p/3762422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!