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中函数的参数与作用域
Mar 20 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
django 修改server端口号的方法
May 14 Python
python的pip安装以及使用教程
Sep 18 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
Python中Numpy ndarray的使用详解
May 24 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
Python Subprocess模块原理及实例
Aug 26 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
没编程基础可以学python吗
Jun 17 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实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
考试不及格检讨书
2014/01/09 职场文书
创先争优活动方案
2014/02/12 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
学校计划生育责任书
2015/05/09 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
关于使用Redisson订阅数问题
2022/01/18 Redis
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android