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解析xml文件实例分享
Dec 04 Python
python制作花瓣网美女图片爬虫
Oct 28 Python
Python获取当前路径实现代码
May 08 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
python dataframe 输出结果整行显示的方法
Jun 14 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
pycharm创建一个python包方法图解
Apr 10 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
Python学习之time模块的基本使用
Jan 17 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(视频)Http下载
2006/12/12 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php处理带有中文URL的方法
2016/07/11 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
使用PHP开发留言板功能
2019/11/19 PHP
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
Node.js模块加载详解
2014/08/16 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
jQuery常用样式操作实例分析(获取、设置、追加、删除、判断等)
2016/09/08 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
vue v-model表单控件绑定详解
2017/05/17 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
python地震数据可视化详解
2019/06/18 Python
python实现用户名密码校验
2020/03/18 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
Python数据可视化图实现过程详解
2020/06/12 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
医生个人年终总结
2015/02/28 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
导游词之河北滦平金山岭长城
2019/10/16 职场文书
Java线程的6种状态与生命周期
2022/05/11 Java/Android