zoukankan      html  css  js  c++  java
  • socket编程学习-------python打造聊天机器人

    前面我们讲到了socket编程,讲的都是一些概念性的东西。这次我们来利用套接字编程原理打造一个聊天机器人。

    在这之前我们先来实现一个“复读机”的功能,就是你说什么,我也说什么!

    服务器端代码如下:

     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()

    客户端代码如下:

     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()

    效果如下:

    是不是感觉很神奇!那么接下里我们就来玩玩机器人吧!

    服务器端代码如下:

     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()

    客户端代码如下:

     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()

    效果如下:

    是不是很炫酷呢!其实很简单的,就是调用了一个图灵机器人的api作为服务器端!

  • 相关阅读:
    VML 和 SVG 的区别
    ie神器htc
    js函数实现递归自调用的方法
    http状态码
    高级算法——贪心算法(背包问题)
    高级算法——贪心算法(找零问题)
    关于arguments.callee
    检索算法——二分查找
    检索算法——顺序查找(最大值、最小值、自组织数据)
    高级排序算法——快速排序(一种分而治之的算法)
  • 原文地址:https://www.cnblogs.com/Beyond-Ricky/p/8076000.html
Copyright © 2011-2022 走看看