六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 288|回复: 0

python网络编程学习笔记(5):socket的一些补充

[复制链接]

升级  72.67%

135

主题

135

主题

135

主题

举人

Rank: 3Rank: 3

积分
418
 楼主| 发表于 2013-1-1 22:33:12 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">1、半开放socket
利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1
表示禁止将来写;2表示禁止将来读和写。
2、timeouts控制超时
调用socket的settimeout()函数,向其传递参数,表明超时时间设置。当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常。
例如:当程序运行后,会等待数据传入。在另一终端,利用telnet连接12345端口。连接成功后,显示“连接来自:****”,如果此时5秒内,终端未进行输入,系
统会提示连接超时退出。
代码如下:
<div class="cnblogs_code"># -*- coding: cp936 -*-##tcp响应服务器import socket,tracebackhost=''port=12345s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)s.bind((host,port))s.listen(1)while 1:    try:        clientsock,clientaddr=s.accept()    except KeyboardInterrupt:        raise    except:        traceback.print_exc()        continue    clientsock.settimeout(5)    try:        print "连接来自:",clientsock.getpeername()        while 1:            data=clientsock.recv(4096)            if not len(data):                break            clientsock.sendall(data)            clientsock.sendall("\nI get it!\n")##            t=raw_input('input the word:')##            clientsock.sendall(t)    except (KeyboardInterrupt,SystemExit):        raise    except socket.timeout:        print '连接超时'        pass    except:        traceback.print_exc()    try:        clientsock.close()    except KeyboardInterrupt:        raise    except:        traceback.print_exc()
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表