python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(五):socket的一些補(bǔ)充
1、半開(kāi)放socket
利用shutdown()函數(shù)使socket雙向數(shù)據(jù)傳輸變?yōu)閱蜗驍?shù)據(jù)傳輸。shutdown()需要一個(gè)單獨(dú)的參數(shù),該參數(shù)表示了如何關(guān)閉socket。具體為:0表示禁止將來(lái)讀;1
表示禁止將來(lái)寫(xiě);2表示禁止將來(lái)讀和寫(xiě)。
2、timeouts控制超時(shí)
調(diào)用socket的settimeout()函數(shù),向其傳遞參數(shù),表明超時(shí)時(shí)間設(shè)置。當(dāng)訪問(wèn)一個(gè)socket,如果經(jīng)過(guò)了參數(shù)設(shè)定的時(shí)間后,什么都沒(méi)有發(fā)生,則會(huì)產(chǎn)生一個(gè)socket.timeout異常。
例如:當(dāng)程序運(yùn)行后,會(huì)等待數(shù)據(jù)傳入。在另一終端,利用telnet連接12345端口。連接成功后,顯示“連接來(lái)自:****”,如果此時(shí)5秒內(nèi),終端未進(jìn)行輸入,系
統(tǒng)會(huì)提示連接超時(shí)退出。
代碼如下:
# -*- coding: cp936 -*-
##tcp響應(yīng)服務(wù)器
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 "連接來(lái)自:",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 '連接超時(shí)'
pass
except:
traceback.print_exc()
try:
clientsock.close()
except KeyboardInterrupt:
raise
except:
traceback.print_exc()
3、理解網(wǎng)絡(luò)字節(jié)順序
不同的平臺(tái)有不同的二進(jìn)制數(shù)據(jù)編碼方法,為了解決這一總是,一種標(biāo)準(zhǔn)的二進(jìn)制數(shù)據(jù)表示法,稱為網(wǎng)絡(luò)字節(jié)順序。在發(fā)送一個(gè)二進(jìn)制整數(shù)之前,該整數(shù)首先被
轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)順序。接收方收到后,在使用該數(shù)據(jù)之前,會(huì)先把網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換成本地的表示方法。
python的struct模塊提供了把數(shù)據(jù)在python和二進(jìn)制數(shù)據(jù)之間轉(zhuǎn)換的支持。
主要的兩種基本格式:
H:適用于16位整數(shù)
I:適用于32位整數(shù)
驚嘆號(hào)表示struct模塊使用網(wǎng)絡(luò)字節(jié)順序來(lái)進(jìn)行編碼和解碼。其它的格式見(jiàn)下表:
|
Character |
Byte order |
Size and alignment |
|
@ |
native |
native 湊夠4個(gè)字節(jié) |
|
= |
native |
standard 按原字節(jié)數(shù) |
|
< |
little-endian |
standard 按原字節(jié)數(shù) |
|
> |
big-endian |
standard 按原字節(jié)數(shù) |
|
! |
network (= big-endian) |
standard 按原字節(jié)數(shù) |
常用語(yǔ)句:
struct.pack(fmt,v1,v2,...)將v1,v2按參數(shù)格式進(jìn)行轉(zhuǎn)換。參數(shù)fmt是格式字符
串,這里主要是!I。v1,v2,...表示要轉(zhuǎn)換的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,)
相關(guān)文章
以911新聞為例演示Python實(shí)現(xiàn)數(shù)據(jù)可視化的教程
這篇文章主要介紹了以911新聞為例演示Python實(shí)現(xiàn)數(shù)據(jù)可視化的教程,主要基于NMF主題模型,需要的朋友可以參考下2015-04-04
詳解Pytorch 使用Pytorch擬合多項(xiàng)式(多項(xiàng)式回歸)
這篇文章主要介紹了詳解Pytorch 使用Pytorch擬合多項(xiàng)式(多項(xiàng)式回歸),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python腳本實(shí)現(xiàn)一鍵自動(dòng)整理辦公文件
這篇文章主要介紹了Python實(shí)現(xiàn)腳本一鍵自動(dòng)整理辦公文件,文件下載文件夾就變得亂七八糟,整理的時(shí)候非常痛苦,巴不得有一個(gè)自動(dòng)化的工具幫我歸類文檔。下面小編就給大家分享自動(dòng)化整理文件的小技巧,需要的朋友可以參考一下文章內(nèi)容2022-02-02
tensorflow實(shí)現(xiàn)簡(jiǎn)單的卷積網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了tensorflow實(shí)現(xiàn)簡(jiǎn)單的卷積網(wǎng)絡(luò),使用的數(shù)據(jù)集是MNIST,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
numpy.ndarray.flatten()函數(shù)的具體使用
本文主要介紹了numpy.ndarray.flatten()函數(shù)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
11個(gè)Python3字典內(nèi)置方法大全與示例匯總
這篇文章主要給大家介紹了11個(gè)Python3字典內(nèi)置方法大全與示例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
Python+Pyqt實(shí)現(xiàn)簡(jiǎn)單GUI電子時(shí)鐘
這篇文章主要為大家詳細(xì)介紹了Python+Pyqt實(shí)現(xiàn)簡(jiǎn)單GUI電子時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

