python網絡編程學習筆記(五):socket的一些補充
1、半開放socket
利用shutdown()函數使socket雙向數據傳輸變?yōu)閱蜗驍祿鬏?。shutdown()需要一個單獨的參數,該參數表示了如何關閉socket。具體為:0表示禁止將來讀;1
表示禁止將來寫;2表示禁止將來讀和寫。
2、timeouts控制超時
調用socket的settimeout()函數,向其傳遞參數,表明超時時間設置。當訪問一個socket,如果經過了參數設定的時間后,什么都沒有發(fā)生,則會產生一個socket.timeout異常。
例如:當程序運行后,會等待數據傳入。在另一終端,利用telnet連接12345端口。連接成功后,顯示“連接來自:****”,如果此時5秒內,終端未進行輸入,系
統(tǒng)會提示連接超時退出。
代碼如下:
# -*- 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、理解網絡字節(jié)順序
不同的平臺有不同的二進制數據編碼方法,為了解決這一總是,一種標準的二進制數據表示法,稱為網絡字節(jié)順序。在發(fā)送一個二進制整數之前,該整數首先被
轉換成網絡字節(jié)順序。接收方收到后,在使用該數據之前,會先把網絡字節(jié)順序轉換成本地的表示方法。
python的struct模塊提供了把數據在python和二進制數據之間轉換的支持。
主要的兩種基本格式:
H:適用于16位整數
I:適用于32位整數
驚嘆號表示struct模塊使用網絡字節(jié)順序來進行編碼和解碼。其它的格式見下表:
Character |
Byte order |
Size and alignment |
@ |
native |
native 湊夠4個字節(jié) |
= |
native |
standard 按原字節(jié)數 |
< |
little-endian |
standard 按原字節(jié)數 |
> |
big-endian |
standard 按原字節(jié)數 |
! |
network (= big-endian) |
standard 按原字節(jié)數 |
常用語句:
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服務器創(chuàng)建虛擬環(huán)境跑代碼
本文主要介紹了Python服務器創(chuàng)建虛擬環(huán)境跑代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07python3 json數據格式的轉換(dumps/loads的使用、dict to str/str to dict、j
JSON (JavaScript Object Notation) 是一種輕量級的數據交換格式。它基于ECMAScript的一個子集。這篇文章主要介紹了python3 json數據格式的轉換(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互轉換) ,需要的朋友可以參考下2019-04-04python使用openpyxl庫修改excel表格數據方法
今天小編就為大家分享一篇python使用openpyxl庫修改excel表格數據方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05