python网络编程学习笔记(五):socket的一些补充
1、半开放socket
利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,该参数表示了如何关闭socket。具体为:0表示禁止将来读;1
表示禁止将来写;2表示禁止将来读和写。
2、timeouts控制超时
调用socket的settimeout()函数,向其传递参数,表明超时时间设置。当访问一个socket,如果经过了参数设定的时间后,什么都没有发生,则会产生一个socket.timeout异常。
例如:当程序运行后,会等待数据传入。在另一终端,利用telnet连接12345端口。连接成功后,显示“连接来自:****”,如果此时5秒内,终端未进行输入,系
统会提示连接超时退出。
代码如下:
#-*-coding:cp936-*-
##tcp响应服务器
importsocket,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)
while1:
try:
clientsock,clientaddr=s.accept()
exceptKeyboardInterrupt:
raise
except:
traceback.print_exc()
continue
clientsock.settimeout(5)
try:
print"连接来自:",clientsock.getpeername()
while1:
data=clientsock.recv(4096)
ifnotlen(data):
break
clientsock.sendall(data)
clientsock.sendall("\nIgetit!\n")
## t=raw_input("inputtheword:")
## clientsock.sendall(t)
except(KeyboardInterrupt,SystemExit):
raise
exceptsocket.timeout:
print"连接超时"
pass
except:
traceback.print_exc()
try:
clientsock.close()
exceptKeyboardInterrupt:
raise
except:
traceback.print_exc()
3、理解网络字节顺序
不同的平台有不同的二进制数据编码方法,为了解决这一总是,一种标准的二进制数据表示法,称为网络字节顺序。在发送一个二进制整数之前,该整数首先被
转换成网络字节顺序。接收方收到后,在使用该数据之前,会先把网络字节顺序转换成本地的表示方法。
python的struct模块提供了把数据在python和二进制数据之间转换的支持。
主要的两种基本格式:
H:适用于16位整数
I:适用于32位整数
惊叹号表示struct模块使用网络字节顺序来进行编码和解码。其它的格式见下表:
常用语句:
struct.pack(fmt,v1,v2,...)将v1,v2按参数格式进行转换。参数fmt是格式字符
串,这里主要是!I。v1,v2,...表示要转换的python值。
struct.unpack(fmt,string)与pack刚好相反。
例如:
>>>importstruct
>>>a=20
>>>str=struct.pack("!I",a)
>>>printrepr(str)
"\x00\x00\x00\x14"
>>>printstruct.unpack("!I",str)
(20,)
相关文章
- Python多线程通信_python socket多线程
- Python线程指南[通俗易懂]
- python判断linux中文件是否存在_Python判断文件是否存在的三种方法
- 【说站】linux 如何退出python
- 【说站】python os怎样处理系统文件
- lambda表达式python_Python中的Lambda表达式「建议收藏」
- python win32api sendmessage_Python win32api.SendMessage方法代码示例[通俗易懂]
- 分享Python网络爬虫过程中编码和解码常用的一个库
- 【复杂网络】 基础画图【python+networkx】
- Python编程基础:f-字符串格式
- 网络工程师学Python-11-数组
- python-Python与MySQL数据库-使用Python执行MySQL查询
- python-Django 高级特性-Django 异步任务(二)
- 网络工程师学Python-34-SSH客户端和服务器库Paramiko
- Python set集合基本操作(添加、删除、交集、并集、差集)
- python实现一个简单的2048游戏详解编程语言
- python通过MySQLdb访问mysql数据库详解编程语言
- Python 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)详解编程语言
- python基础编程详解编程语言
- Python操作Redis实现数据持久化(python操作redis)
- Python实现快速连接Redis数据库(python连接redis)
- python二分法实现实例
- python网络编程学习笔记(三):socket网络服务器
- python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
- python网络编程学习笔记(10):webpy框架