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字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
Python写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
python3人脸识别的两种方法
Apr 25 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
详解python tkinter模块安装过程
Jan 06 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
python区块链持久化和命令行接口实现简版
May 25 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递归创建和删除文件夹的代码小结
2012/04/13 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
php以post形式发送xml的方法
2014/11/04 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
php实现算术验证码功能
2018/12/05 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
javascript中数组的多种定义方法和常用函数简介
2014/05/09 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
python学习入门细节知识点
2018/03/29 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
网络教育自我鉴定
2013/11/01 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
简历里的自我评价范文
2014/02/24 职场文书
《锄禾》教学反思
2014/04/08 职场文书
运动会演讲稿300字
2014/08/25 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
购房个人委托书范本
2014/10/11 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB