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文件操作之合并文本文件内容示例代码
Sep 19 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
利用pandas进行大文件计数处理的方法
Jul 25 Python
Pytorch 中retain_graph的用法详解
Jan 07 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
python实现简单飞行棋
Feb 06 Python
如何在python中执行另一个py文件
Apr 30 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
Python中Yield的基本用法
Oct 18 Python
Python编程编写完善的命令行工具
Sep 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
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
PHP中cookie知识点学习
2018/05/06 PHP
php获取微信openid方法总结
2019/10/10 PHP
firefox 和 ie 事件处理的细节,研究,再研究 书写同时兼容ie和ff的事件处理代码
2007/04/12 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
学校安全教育制度
2014/01/31 职场文书
大学运动会入场词
2014/02/22 职场文书
端午节活动总结
2014/08/26 职场文书
安全生产标语大全
2014/10/06 职场文书
导游欢迎词范文
2015/01/23 职场文书
图书借阅制度范本
2015/08/06 职场文书