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获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python中动态获取对象的属性和方法的教程
Apr 09 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python config文件的读写操作示例
Sep 27 Python
python全局变量引用与修改过程解析
Jan 07 Python
浅谈Django前端后端值传递问题
Jul 15 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 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
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
2015/10/06 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
js 作用域和变量详解
2017/02/16 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
总结4个方面优化Vue项目
2019/02/11 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
python处理multipart/form-data的请求方法
2018/12/26 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
异常和异常类的概念
2014/09/12 面试题
护理专业毕业生自我鉴定
2013/10/08 职场文书
办理居住证介绍信
2014/01/15 职场文书
办公设备采购方案
2014/03/16 职场文书
利群广告词
2014/03/20 职场文书
人事主管岗位职责
2015/02/04 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs