標籤:用戶端程式 hand 接收 object socket 使用者 inpu python 客戶
首先我們可以看下可以最簡單的互動性的服務端和用戶端程式
server
import socketdef main(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind((‘localhost‘,8000)) sock.listen(5) while True: print ‘1‘ connection ,clent_addr = sock.accept() while 1: buf = connection.recv(1024) connection.sendall(‘hi‘) print buf connection.close()if __name__ == ‘__main__‘: main()
[server]:在建立socket之後,服務端會一直保持阻塞狀態,然後一旦有使用者串連,就立即等待使用者發送資料,然後接收到使用者發的資料之後 理解返回一個字元後,然後狀態變成等待下次串連
client
import socketsock = socket.socket()sock.connect((‘localhost‘, 8000))sock.settimeout(5)while 1: res = sock.recv(1024) print res data = raw_input(‘input:‘) sock.sendall(data)sock.close()
[client]:去串連server端然後不斷髮送資料,然後接受返回。
-------------------------------------------------------------------------------
那麼你可以發現上面的server端的代碼 其實只能同時接受一個請求,因為只有一個線程去處理這個段代碼
那麼我可以吧server端的代碼換成
import SocketServerclass MyServer(SocketServer.BaseRequestHandler,object): def handle(self): conn = self.request conn.sendall(‘this is a tast‘) Flag = True while Flag: data = conn.recv(1024) print "data:",data if data == "exit": Flag = True elif data == ‘0‘: conn.sendall("The winter in comming") else: conn.sendall("please input again")if __name__ == "__main__": server01 = SocketServer.ThreadingTCPServer((‘127.0.0.1‘,8080),MyServer) print "server is running.." server01.serve_forever()
我們通過藉助socket內建的類寫出來了 多線程的伺服器端,能夠收發訊息
python-網路編程-03