当前位置:  编程技术>python

python网络编程学习笔记(五):socket的一些补充

    来源: 互联网  发布时间:2014-10-07

    本文导语:  1、半开放socket 利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1 表示禁止将来写;2表示禁止将来读和写。 2、timeouts控制超时 调...

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        按原字节数

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)
'x00x00x00x14'
>>> print struct.unpack("!I",str)
(20,)


    
 
 

您可能感兴趣的文章:

  • python网络编程示例(客户端与服务端)
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • python网络编程之TCP通信实例和socketserver框架使用例子
  • python网络编程学习笔记(二):socket建立网络客户端
  • python网络编程学习笔记(一)
  • Python 网络编程起步(Socket发送消息)
  • python网络编程学习笔记(九):数据库客户端 DB-API
  • python socket网络编程步骤详解(socket套接字使用)
  • python网络编程学习笔记(六):Web客户端访问
  • python网络编程学习笔记(三):socket网络服务器
  • python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
  • python网络编程学习笔记(10):webpy框架
  • python网络编程学习笔记(四):域名系统
  • Python 网络编程说明第1/2页
  • python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • php和perl,python,学习哪种编程语言好。
  • python 示例分享---逻辑推理编程解决八皇后
  • 用Python编程实现语音控制电脑
  • python原始套接字编程示例分享
  • 从零学python系列之数据处理编程实例(一)
  • python和C语言混合编程实例
  • python多线程编程方式分析示例详解
  • Python高效编程技巧
  • 在Python中使用异步Socket编程性能测试
  • 用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
  • 实例讲解python函数式编程
  • 从零学python系列之数据处理编程实例(二)
  • Python中的并发编程实例
  • Python Socket编程入门教程
  • Python编程语言的35个与众不同之处(语言特征和使用技巧)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python学习笔记_数据排序方法
  • Python学习笔记(一)(基础入门之环境搭建)
  • Python日期操作学习笔记
  • Python函数学习笔记
  • python笔记(2)
  • python笔记(1) 关于我们应不应该继续学习python
  • Python 学习笔记
  • Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
  • python函数缺省值与引用学习笔记分享
  • Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
  • python学习笔记:字典的使用示例详解
  • Python ORM框架SQLAlchemy学习笔记之关系映射实例
  • Python笔记(叁)继续学习
  • Python tempfile模块学习笔记(临时文件)
  • Python入门及进阶笔记 Python 内置函数小结
  • Python学习笔记(二)基础语法
  • Python logging模块学习笔记
  • 编程技术其它 iis7站长之家
  • Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
  • Python 中文正则表达式笔记
  • Python不使用print而直接输出二进制字符串
  • 让python同时兼容python2和python3的8个技巧分享
  • Python中实现json字符串和dict类型的互转
  • 使用setup.py安装python包和卸载python包的方法
  • python异常信息堆栈输出到日志文件
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • Python开发者社区整站源码 Pythoner
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • python读取csv文件示例(python操作csv)
  • Python获取网页编码的方法及示例代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3