1、客户/服务器架构
1.1 硬件客户
如:打印机
1.2 软件客户
如:web服务器,数据库服务器
2、套接字
套接字好比连接服务器的“通讯端点”,没有套接字就无法创建连接。
2.1套接字家族
“家族名”: AF_UNIX,
”地址家族“:AF_INET
2.2主机与端口
合法的端口号范围为0 到65535。其中,小于1024 的端口号为系统保留端口。
2.3面向连接和无连接
面向连接套接字,使用的是TCP/IP传输协议
无连接使用的是UDP/IP协议
2.4服务器/客户端编程
2.4.1socket模块
TCP服务器编程
<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) #创建流类型的服务器套接字
tcpServer.bind(ADDR) #把地址绑定在套接字上
tcpServer.listen(5) #监听连接,最多5个
</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) #创建流类型的客户端套接字
tcpCliSock.connect(ADDR) #与服务器建立连接
</br>
while True:
data=raw_input('>>')
if not data:
break
tcpCliSock.send(data) #发送信息给服务器
data=tcpCliSock.recv(BUFSIZ) #接受服务器信息
if not data:
break
print datatcp
</br>
CliSock.close()
</pre>
2.4.2SocketServer模块
SocketServer服务器
<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): #处理客户发送的信息
print '...connected from:',self.client_address
self.wfile.write('[%s] %s' %(ctime(),self.rfile.readline())) #write发送信息给客户,self.rfile.readline()读取客户发送的信息
</br>
tcpServer=TCPServer(ADDR,MyRequestHandler)
print 'waiting for connection...'tcpServer.serve_forever()
</pre>