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进行行为驱动开发的入门教程
Apr 23 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
python第三方库学习笔记
Feb 07 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
Python OpenCV形态学运算示例详解
Apr 07 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
PHP下一个非常全面获取图象信息的函数
2008/11/20 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
如何通过python检查文件是否被占用
2020/12/18 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
请介绍一下Ant
2016/07/22 面试题
银行开业庆典方案
2014/02/06 职场文书
春节慰问信范文
2015/02/15 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
公司行政管理制度范本
2015/08/05 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书