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 07 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 Python
python实现移位加密和解密
Mar 22 Python
django实现类似触发器的功能
Nov 15 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
用python爬虫批量下载pdf的实现
Dec 01 Python
Python 多线程处理任务实例
Nov 07 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面向对象编程快速入门
2006/10/09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
js实现随机数小游戏
2019/06/28 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
Python实现定时任务
2017/02/08 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
车间组长岗位职责
2013/12/20 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
保护水资源的标语
2014/06/17 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
后勤工作个人总结
2015/02/28 职场文书
2016新年年会主持词
2015/07/06 职场文书
python glom模块的使用简介
2021/04/13 Python
解决Pytorch中关于model.eval的问题
2021/05/22 Python
利用Python+OpenCV三步去除水印
2021/05/28 Python
为Centos安装指定版本的Docker
2022/04/01 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers