注意:以下內容是個人使用的隨手記錄, 就是介紹了下簡單的使用
歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!
---------------------------------------------------------------------------------------
SocketServer模塊,這裏主要介紹TCP通信
python中網絡編程除了socket模塊還提供了SocketServer模塊,這一模塊主要是對socket模塊進行了封裝,
將socket的對象的創建,綁定,連接,接收,發送,關閉都封裝在裏面,大大簡化了網絡服務的編程。
此模塊提供了以下2個主要的和2個次要的繼承的網絡服務類,用於創建相應的套接字流
TCPServer 創建TCP協議的套接字流
UDPServer 創建UDP協議的套接字流
UnixStreamServer(繼承自TCPServer)
UnixDatagramServer(繼承自UDPServer)
注意:這四種方法都是同步實現的網絡通信
所有四個服務器類的實例都有以下方法和變量:
1、s.socket 用於傳入請求的套接字對象。
2、s.sever_address 監聽服務器的地址。如元組("127.0.0.1",80)
3、s.RequestHandlerClass 傳遞給服務器構造函數並由用戶提供的請求處理程序類。
4、s.serve_forever() 處理無限的請求
5、s.shutdown() 停止serve_forever()循環
6、s.fileno() 返回服務器套接字的整數文件描述符。該方法可以有效地通過輪詢操作(如select()函數)使用服務器實例。
編寫一個SocketServer需要實現以下步驟:
編寫一個handler類,繼承BaseRequestHandler,重寫handle()方法
針對是TCP還是UDP,生成一個server對象
調用server對象的handle_request或者serve_forever方法
案例:服務端(同步)
# -*- coding:utf-8 -*-
import SocketServer
class MyTcpHandler(SocketServer.BaseRequestHandler):
def handle(self):
# 接收客戶端發送過來的數據, 去掉收尾空格
self.data = self.request.recv(1024).strip()
print self.client_address
print "ip address is:{} --> the client write: {}".format(
self.client_address[0], self.data
)
self.request.sendall(self.data.upper()) # 發送給客戶端數據轉爲大寫
if __name__ == '__main__':
HOST, PORT = '127.0.0.1', 9999
server = SocketServer.TCPServer((HOST, PORT), MyTcpHandler)
server.serve_forever()
案例:客戶端(同步)
# -*- coding:utf-8 -*-
import socket
HOST = '127.0.0.1'
PORT = 9999
while True:
data = raw_input('please input your info -->:')
print 'The client send data is:%s' % data
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((HOST, PORT))
sock.sendall(data + '\n')
received = sock.recv(1024)
print 'received server return data is: %s ' % received
except:
pass
finally:
sock.close()
運行結果:
服務端:
root@ubuntu:~/learn$ python socket_server.py
('127.0.0.1', 34234)
ip address is:127.0.0.1 --> the client write: www
('127.0.0.1', 34236)
ip address is:127.0.0.1 --> the client write: ddd
客戶端:
root@ubuntu:~/learn$ python socket_cli.py
please input your info -->:www
The client send data is:www
received server return data is: WWW
please input your info -->:ddd
The client send data is:ddd
received server return data is: DDD