1、客戶/服務(wù)器架構(gòu)

1.1 硬件客戶
如:打印機(jī)
1.2 軟件客戶
如:web服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器
2、套接字
套接字好比連接服務(wù)器的“通訊端點(diǎn)”,沒(méi)有套接字就無(wú)法創(chuàng)建連接。
2.1套接字家族
“家族名”: AF_UNIX,
”地址家族“:AF_INET
2.2主機(jī)與端口
合法的端口號(hào)范圍為0 到65535。其中,小于1024 的端口號(hào)為系統(tǒng)保留端口。
2.3面向連接和無(wú)連接
面向連接套接字,使用的是TCP/IP傳輸協(xié)議
無(wú)連接使用的是UDP/IP協(xié)議
2.4服務(wù)器/客戶端編程
2.4.1socket模塊
TCP服務(wù)器編程
<pre>
#encoding=utf-8
from socket import *
from time import ctime
</br>
HOST='127.0.0.1'
PORT=5005
BUFSIZ=1024
ADDR=(HOST,PORT)
tcpServer=socket(AF_INET,SOCK_STREAM) #創(chuàng)建流類型的服務(wù)器套接字
tcpServer.bind(ADDR) #把地址綁定在套接字上
tcpServer.listen(5) #監(jiān)聽連接,最多5個(gè)
</br>
while True:
print 'Waiting for connection...'
tcpCliSock,addr=tcpServer.accept() #接受客戶連接
print '...connected form:',addr #客戶端地址
data=tcpCliSock.recv(BUFSIZ) #接受客戶端的信息
print data
if not data:
break
tcpCliSock.send('[%s] %s' %(ctime(),data)) #反饋信息給客戶端</br>
tcpCliSock.close()tcpServer.close()
</pre>
客戶端編程<pre>
#encoding=utf-8
from socket import *
</br>
HOST='127.0.0.1'
PORT=5005BUFSIZ=1024
ADDR=(HOST,PORT)
tcpCliSock=socket(AF_INET,SOCK_STREAM) #創(chuàng)建流類型的客戶端套接字
tcpCliSock.connect(ADDR) #與服務(wù)器建立連接
</br>
while True:
data=raw_input('>>')
if not data:
break
tcpCliSock.send(data) #發(fā)送信息給服務(wù)器
data=tcpCliSock.recv(BUFSIZ) #接受服務(wù)器信息
if not data:
break
print datatcp
</br>
CliSock.close()
</pre>
2.4.2SocketServer模塊
SocketServer服務(wù)器
<pre>
#encoding=utf-8
from SocketServer import TCPServer,StreamRequestHandler
from time import ctime
</b>
HOST='127.0.0.1'
PORT=21567
ADDR=(HOST,PORT)
</b>
class MyRequestHandler(StreamRequestHandler):
def handle(self): #處理客戶發(fā)送的信息
print '...connected from:',self.client_address
self.wfile.write('[%s] %s' %(ctime(),self.rfile.readline())) #write發(fā)送信息給客戶,self.rfile.readline()讀取客戶發(fā)送的信息
</br>
tcpServer=TCPServer(ADDR,MyRequestHandler)
print 'waiting for connection...'tcpServer.serve_forever()
</pre>