python通過socket模組提供了訪問作業系統socket庫的介面,建立socket的時候,只需要呼叫這個模組裡的函式和常量。
建立socket
對於乙個客戶端程式,建立乙個socket需要經過兩個步驟:1.建立乙個實際的socket物件。2.將它連線到遠端伺服器上。
在建立socket物件的時候,需要告訴作業系統使用的通訊型別和協議家族。
對於tcp通訊,**如下;
s = socket.socket(socket.af_inet,socket.sock_stream)
對於udp通訊,**則為:
為了尋找到合適的埠號,socket模組中包含了乙個getservbyname()的函式,它可以自動查詢埠號。這個函式接受兩個引數:協議名和埠名。埠名是乙個字串
這樣我們上面的**就可以寫成
從socket獲取資訊:
getsockname()函式用於獲取本機的ip位址和埠號,getpeername()用於獲得遠端機器的ip位址和埠號
處理異常
socket模組中定義了四種可能出現的異常
1.與一般i/o和通訊問題有關的socket.error
2.與查詢位址資訊有關的socket.gaierror
3.與其他位址錯誤有關的socket.herror
4.與在乙個socket上呼叫settimeout()後,處理超時有關的socket.timeout()
# -*- coding: cp936 -*-
##modify by 小五義
import socket,sys
port =70
host=sys.argv[1]
filename=sys.argv[2]
try:
s=socket.socket(socket.af_inet,socket.sock_stream)
except socket.error,e:
print "建立socket錯誤:%s"%e
try:
s.connect((host,port))
except socket.gaierror,e:
print "host或者埠錯誤:%s" %e
except socket.error,e:
print "連線錯誤:%s" %e
try:
s.sendall(filename+"\r\n")
except socket.error,e:
print "資料傳送錯誤:%s" %e
sys.exit(1)
while 1:
try:
buf=s.recv(2048)
except socket.error,e:
print "接收錯誤:%s"%e
sys.exit(1)
if 'does not exist' in buf:
print "%s檔案不存在" %filename
else:
if not len(buf):
break
sys.stdout.write(buf)
Python基礎學習筆記(二)
時間裝飾器,日誌裝飾器 def log func def logger warpper args,kwargs print func.name is running result func args,kwargs print func.name is finish return result ret...
python基礎學習筆記二
二 資料型別 3 bool 布林 4 list 列表 5 tuple 元組 6 dict 字典 7 set 集合 包含 英文本母 數字 特殊字元 大小 8bit 1byte 包含 中文 是國標碼 大小 16bit 2byte 包含 萬國碼 大小 32bit 4byte 包含 英文 歐洲文字 中文 英...
python學習筆記(二) python基礎函式
python之所以強大好用,離不開可以呼叫的各種庫,同時也和他自身函式相關,下面為學習python函式相關知識後整理知識點。1 python函式引數 python函式定義簡單但靈活度非常大。除正常定義的必選引數外,還可以使用預設引數,可變引數,關鍵字引數。預設引數 def power 5 x 2 在...