前面咱們講到了socket編程,講的都是一些概念性的東西。此次咱們來利用套接字編程原理打造一個聊天機器人。python
在這以前咱們先來實現一個「復讀機」的功能,就是你說什麼,我也說什麼!編程
服務器端代碼以下:json
1 # -*- coding:utf-8 -*- 2 3 4 import socket 5 import sys 6 sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#類別 流式(建立套接字) 7 host = '127.0.0.1' #服務器ip名 8 port =9999#端口號 9 sk.bind((host,port))#將socket綁定到指定的地址 10 sk.listen(3)#指定最多容許多少客戶鏈接到服務器 11 12 while 1: 13 clnt,addr =sk.accept() 14 print 'clnt address:',addr 15 while True: 16 data = clnt.recv(10) 17 if not data: 18 sys.exit() 19 print 'going to run cmd:',data 20 21 clnt.sendall(data) 22 clnt.close()
客戶端代碼以下:api
1 # -*- coding:utf-8 -*- 2 3 import socket 4 s = socket.socket() 5 s.connect(('127.0.0.1',9999)) 6 while 1: 7 cmd = raw_input('please input cmd:') 8 if cmd == 'quit': 9 break 10 elif cmd == '': 11 continue 12 s.sendall(cmd) 13 data = s.recv(2048) 14 print data 15 s.close()
效果以下:服務器
是否是感受很神奇!那麼接下里咱們就來玩玩機器人吧!socket
服務器端代碼以下:ui
1 # -*- coding:utf-8 -*- 2 3 import socket 4 import urllib 5 import json 6 import sys 7 reload(sys) 8 sys.setdefaultencoding('utf-8') 9 10 #info = 'python' 11 def get_computer(info): 12 key = '186cccedc79549ecac4dcc8a56fc9fb4' 13 api = 'http://www.tuling123.com/openapi/api?key='+key+'&info='+info 14 response =urllib.urlopen(api).read() 15 dic_json = json.loads(response) 16 return '機器人:'.decode('utf-8')+dic_json['text'] 17 host = socket.gethostbyname(socket.gethostname()) 18 print host 19 port =11112 20 s = socket.socket() 21 s.bind((host,port)) 22 s.listen(1) 23 24 while True: 25 clnt,addr = s.accept() 26 print 'client address:',addr 27 while True: 28 data = clnt.recv(1024) 29 #print data 30 if not data:sys.exit() 31 print 'going to :',data 32 result = get_computer(data) 33 if len(result) == 0: 34 result = "EXD" 35 clnt.sendall(result) 36 37 clnt.close()
客戶端代碼以下:url
1 # -*- coding:utf-8 -*- 2 3 import socket 4 5 s = socket.socket() 6 7 host = socket.gethostbyname(socket.gethostname()) 8 9 port = 11112 10 11 s.connect((host,port)) 12 13 while True: 14 cmd = raw_input('Please input line:') 15 16 if cmd == 'quit': 17 break 18 elif cmd == '': 19 continue 20 s.sendall(cmd) 21 data = s.recv(1024) 22 print data 23 24 s.close()
效果以下:spa
是否是很炫酷呢!其實很簡單的,就是調用了一個圖靈機器人的api做爲服務器端!code