標籤:address python socket 網路編程
網路編程的一個基本組件就是通訊端(socket)
一個通訊端就是一個socket模組中的socket類的執行個體,他的執行個體化需要3個參數:
第一個參數是地址族(預設是socket.AF_INET,首碼AF_表示地址族(address family))
第二個參數是流(socket.SOCK_STREAM,預設值) 或者 資料報(socket.SOCK_DGRAM)通訊端
第三個參數是協議,預設是0(一般可不提供)
# 匯入socket庫:import socket# 建立Socket時,AF_INET指定使用IPv4協議,IPv6就指定為AF_INET6。SOCK_STREAM指定使用面向流的TCP協議s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 建立串連:注意參數是一個tuple,包含地址和連接埠號碼。s.connect((‘www.baidu.com‘, 80))
socket有兩個方法:send和recv
s.send(‘GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n‘)
s.recv:用一個所需(最大)位元組數做參數調用recv來接收資料,一般建議1024
一個簡單伺服器端的例子
import sockets = socket.socket()host = socket.gethostname() #擷取本機port = 2233s.bind((host, port))s.listen(5) #調用listen()方法開始監聽連接埠,傳入的參數指定等待串連的最大數量:print ‘Waiting for connection...‘while True:#伺服器通過迴圈來接受串連,accept()會等待並返回一個用戶端的串連,類型是tuple: c,addr = s.accept() print ‘Get connection from %s:%s‘ % addr c.send(‘Thank you for connecting‘) c.close()
##升級版##使用物件導向的思維,一個基於SocketServer類的伺服器from SocketServer import TCPServer,StreamRequestHandlerclass Handler(StreamRequestHandler): def handle(self): addr = self.request.getpeername() print ‘Get connection from: %s %s‘ % addr self.wfile.write(‘Thank you for connection‘)#‘‘Null 字元表示程式啟動並執行本機server = TCPServer((‘‘,2345),Handler)server.serve_forever()
一個用戶端的例子
import sockets = socket.socket()host = socket.gethostname()port = 2233s.connect((host, port))print s.recv(2233)
【python學習】socket編程