源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-05-01 02:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python网络编程学习笔记(五):socket的一些补充
[b]1、半开放socket[/b] 利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1 表示禁止将来写;2表示禁止将来读和写。 [b]2、timeouts控制超时[/b] 调用socket的settimeout()函数,向其传递参数,表明超时时间设置。当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常。 例如:当程序运行后,会等待数据传入。在另一终端,利用telnet连接12345端口。连接成功后,显示“连接来自:****”,如果此时5秒内,终端未进行输入,系 统会提示连接超时退出。 代码如下:
[u]复制代码[/u] 代码如下:
# -*- 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()
[b]3、理解网络字节顺序[/b] 不同的平台有不同的二进制数据编码方法,为了解决这一总是,一种标准的二进制数据表示法,称为网络字节顺序。在发送一个二进制整数之前,该整数首先被 转换成网络字节顺序。接收方收到后,在使用该数据之前,会先把网络字节顺序转换成本地的表示方法。 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) 'x00x00x00x14' >>> print struct.unpack("!I",str) (20,)
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部