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代码(逐级优化)
May 25 Python
python中__slots__用法实例
Jun 04 Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 Python
Python读取word文本操作详解
Jan 22 Python
解决Python2.7中IDLE启动没有反应的问题
Nov 30 Python
基于Python获取城市近7天天气预报
Nov 26 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
TensorBoard 计算图的查看方式
Feb 15 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
PyQt 如何创建自定义QWidget
Mar 24 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Javascript 原型和继承(Prototypes and Inheritance)
2009/04/01 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
Javascript调用C#代码
2011/01/17 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
浅析python协程相关概念
2018/01/20 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
详解django.contirb.auth-认证
2018/07/16 Python
Python面向对象程序设计构造函数和析构函数用法分析
2019/04/12 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
python语言的优势是什么
2020/06/17 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
正隆泰信息技术有限公司上机题
2012/06/14 面试题
建筑工程技术应届生自荐信
2013/09/27 职场文书
实习指导老师评语
2014/04/26 职场文书
给校长的建议书200字
2014/05/16 职场文书
社区工作者演讲稿
2014/05/23 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书