国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python網絡編程學習筆記(五):socket的一些補充

2019-11-25 18:23:07
字體:
來源:轉載
供稿:網友

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        按原字節數

<

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 法库县| 东源县| 安陆市| 黎城县| 繁峙县| 兰坪| 忻州市| 新河县| 娄烦县| 宁强县| 织金县| 龙海市| 噶尔县| 那坡县| 长顺县| 永泰县| 富顺县| 佛学| 连江县| 武宣县| 永胜县| 宜兴市| 宿迁市| 德清县| 黄山市| 京山县| 绥芬河市| 东丽区| 江孜县| 个旧市| 巴彦县| 黔南| 资中县| 武定县| 多伦县| 搜索| 城步| 富顺县| 新余市| 台州市| 江北区|