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接收多播数据的代码
Mar 01 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
Php多进程实现代码
May 07 Python
python+Splinter实现12306抢票功能
Sep 25 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
如何将你的应用迁移到Python3的三个步骤
Dec 22 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
keras中的loss、optimizer、metrics用法
Jun 15 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
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
c#+jquery实现获取radio和checkbox的值
2020/09/12 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
JavaScript中的原型prototype属性使用详解
2015/06/05 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
前端性能优化及技巧
2016/05/06 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python 字典dict使用介绍
2014/11/30 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python部署web开发程序的几种方法
2017/05/05 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python实现多进程的四种方式
2019/02/22 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
python中time库的实例使用方法
2019/10/31 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
Cocopanda波兰:购买化妆品、护肤品、护发和香水
2020/05/25 全球购物
《北京的春节》教学反思
2014/04/07 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
个人整改方案范文
2014/10/25 职场文书
违纪检讨书范文
2015/01/27 职场文书
退伍军人感言
2015/08/01 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
JS中一些高效的魔法运算符总结
2021/05/06 Javascript