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、理解網絡字節順序
新聞熱點
疑難解答