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


Posted in Python onJune 09, 2014

1、半开放socket

利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1
表示禁止将来写;2表示禁止将来读和写。

2、timeouts控制超时

调用socket的settimeout()函数,向其传递参数,表明超时时间设置。当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常。
例如:当程序运行后,会等待数据传入。在另一终端,利用telnet连接12345端口。连接成功后,显示“连接来自:****”,如果此时5秒内,终端未进行输入,系
统会提示连接超时退出。

代码如下:

# -*- coding: cp936 -*-
##tcp响应服务器
import socket,traceback
host=''
port=12345
s=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()

3、理解网络字节顺序

不同的平台有不同的二进制数据编码方法,为了解决这一总是,一种标准的二进制数据表示法,称为网络字节顺序。在发送一个二进制整数之前,该整数首先被
转换成网络字节顺序。接收方收到后,在使用该数据之前,会先把网络字节顺序转换成本地的表示方法。
python的struct模块提供了把数据在python和二进制数据之间转换的支持。
主要的两种基本格式:
H:适用于16位整数
I:适用于32位整数
惊叹号表示struct模块使用网络字节顺序来进行编码和解码。其它的格式见下表:

Character Byte order Size and alignment
@ native native            凑够4个字节
= native standard        按原字节数
little-endian standard        按原字节数
> big-endian standard       按原字节数
! network (= big-endian) standard       按原字节数

常用语句:

struct.pack(fmt,v1,v2,...)将v1,v2按参数格式进行转换。参数fmt是格式字符
串,这里主要是!I。v1,v2,...表示要转换的python值。
struct.unpack(fmt,string)与pack刚好相反。
例如:

>>> import struct
>>> a=20
>>> str=struct.pack("!I",a)
>>> print repr(str)
'\x00\x00\x00\x14'
>>> print struct.unpack("!I",str)
(20,)

Python 相关文章推荐
python实现问号表达式(?)的方法
Nov 27 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
Dec 15 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Python2.x与3​​.x版本有哪些区别
Jul 09 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
Python常用断言函数实例汇总
Nov 30 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
pandas数据分组groupby()和统计函数agg()的使用
Mar 04 Python
python网络编程学习笔记(四):域名系统
Jun 09 #Python
python网络编程学习笔记(三):socket网络服务器
Jun 09 #Python
python网络编程学习笔记(二):socket建立网络客户端
Jun 09 #Python
python网络编程学习笔记(一)
Jun 09 #Python
有关wxpython pyqt内存占用问题分析
Jun 09 #Python
wxpython 最小化到托盘与欢迎图片的实现方法
Jun 09 #Python
Python实例之wxpython中Frame使用方法
Jun 09 #Python
You might like
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
用jQuery实现抽奖程序
2020/04/12 jQuery
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
python使用正则筛选信用卡
2019/01/27 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
新锐科技Java程序员面试题
2016/07/25 面试题
市场营销专业推荐信
2013/11/03 职场文书
销售总监工作职责
2013/11/21 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
出国留学导师推荐信
2015/03/26 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
linux下安装redis图文详细步骤
2021/12/04 Redis