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 08 Python
Python遍历numpy数组的实例
Apr 04 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
python pygame实现球球大作战
Nov 25 Python
Selenium元素定位的30种方式(史上最全)
May 11 Python
python实现人像动漫化的示例代码
May 17 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
Python3如何使用tabulate打印数据
Sep 25 Python
Numpy数组的广播机制的实现
Nov 03 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
python分分钟绘制精美地图海报
Feb 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
简单采集了yahoo的一些数据
2007/02/14 PHP
php时间不正确的解决方法
2008/04/09 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PDO::rollBack讲解
2019/01/29 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
利用python写个下载teahour音频的小脚本
2017/05/08 Python
把django中admin后台界面的英文修改为中文显示的方法
2019/07/26 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
车间班长岗位职责
2013/11/30 职场文书
小型女装店的创业计划书
2014/01/09 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
2014年商场国庆节活动策划方案
2014/09/16 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
MySQL批量更新不同表中的数据
2022/05/11 MySQL