本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows)。后来发现实现起来特别麻烦, 就想到python。听说这家伙在什么地方都能发挥作用。所以想用python来做通讯模块。。。所以主要学习pythonn的多线程和tcp连接。

但是没有用过python, 所有在学习python的同时写个小小的程序 -》 和机器人聊天

本程序机器人由【图灵机器人 http://www.tuling123.com】提供, 把编写的例子发了出来供初学python的朋友们学习和熟悉。

注意:python版本必须为3.x +, 不兼容2.x版本的python

文件列表: 

main_server.py: 服务端程序,用于接收客户端的信息, 并返回Jinko回答的话

 # tcp server
import socket;
import time;
import threading;
from JinkoRobot import *; #应用程序入口类
class ApplicationServer: #构造函数初始化 socket
def __init__(self, host="localhost", port=8005):
self.connList = [];
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
self.socket.bind((host, port));
self.socket.listen(100);
print("我是Jinko, 我来自[图灵机器人:http://www.tuling123.com]");
print("");
print("赶紧打开客户端和我聊天吧!");
self.accept(); #多线程接受用户请求
def accept(self):
while True:
connection, address = self.socket.accept();
# print('connect')
thread = ChatThread(connection);
thread.start(); #聊天线程
class ChatThread(threading.Thread): def __init__(self, conn):
threading.Thread.__init__(self);
self.__connection = conn; def run(self):
while True:
try:
recv = self.__connection.recv(8192);
except:
break; # print("收到:" + recv.decode('utf-8'))
rebot = JinkoRobot();
rebot.listenFor(recv.decode('utf-8'));
answer = rebot.answer();
# print('say:' + answer)
self.__connection.send(answer.encode('utf-8')); ApplicationServer();

main_client.py: 客户端程序, 用于和Jinko发起聊天

 import socket;
import time; sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
print("正在和Jinko连线...");
sock.connect(('localhost', 8005));
print(""); while True:
speak = input("和Jinko说点什么:"); if speak == "quit":
break; if speak == "":
continue; # print("发送中..." + "("+ speak +")")
sock.send(speak.encode('utf-8'));
# print("已发送") print("Jinko在思考...");
answer = sock.recv(8192);
print("Jinko回复你:" + answer.decode('utf-8'));
print(""); sock.close();

JinkoRobot.py: 它就是Jinko啦啦啦~~

 #Jinko Robot
import json;
import urllib.request;
import urllib.parse; class JinkoRobot: __answer = ''; def __init__(self):
pass; #倾听话语
def listenFor(self, string):
self.__answer = self.thinking(string); # 思考着
def thinking(self, string):
says = urllib.parse.quote_plus(string);
f = urllib.request.urlopen("http://www.tuling123.com/openapi/api?key=4bc32d41c10be18627438ae45eb839ac&info=" + says);
json_str = f.read();
thinkdata = json.loads(json_str.decode('utf-8'));
f.close(); if(thinkdata['code'] > 40000 and thinkdata['code'] < 40010):
return "今天Jinko被你问得有点累了, 过会再问吧!"; if(thinkdata['code'] == 200000):
return thinkdata['text'] + ", 猛戳这里>>" + thinkdata['url']; if(thinkdata['code'] == 302000) :
info = thinkdata['text']; for content in thinkdata['list']:
info += "\n\n>" + content['article'] \
+ " 来源于" + content['source'] \
+ " 详细信息请猛戳这里>>" + content['detailurl']; return info; if(thinkdata['code'] == 305000):
info = thinkdata['text']; for key in thinkdata['list']:
info += "\n\n>" + key + ": 车次>" + content['trainnum'] \
+ " 从" + content['start'] + "到" + content['terminal'] \
+ " 发车时间:" + content['starttime'] \
+ " 到达时间:" + content['endtime'] \
+ " 详细信息请猛戳这里>>" + content['detailurl']; return info; return thinkdata['text']; #和你交流回答
def answer(self):
return self.__answer;

运行效果图:

最后我想说下, 我只是python的初学者,没啥python经验哈

顺便提供下zip下载包:http://files.cnblogs.com/files/JinkoWu/ChatWithRobot.zip

用Python写的一个多线程机器人聊天程序的更多相关文章

  1. 我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容

    我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容,目前测试了300多个新闻网站的新闻页,都能准确识别

  2. 用Python写了一个postgresql函数,感觉很爽

    用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

  3. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

  4. 使用itchat实现一个微信机器人聊天回复功能

    近看到好多群里都有一个@机器人的功能,挺有趣的,想自己也玩下,就通过百度一点点实现,在这总结一下整个从无到有的过程. 首先,要知道itchat,它是Python写的,所以想要实现这个机器人的功能,需要 ...

  5. python写的一个集合

    起因:原本打算用python写一个抢火车票的脚本.在那 期间遇见各种浏览器驱动失败的节奏....打算先缓一下 然后就去写集合了. 0x01 源码: # -*- coding:'utf-8' -*- # ...

  6. 试着用c写了一个多线程的同步

    在Java中写多线程相关的程序简单很多,在多线程中需要同步的时候,使用synchronized就行了. 最近学习c的多线程与同步,感觉实现起来,要写的代码比较多一些,这也许是因为java封装的比较好吧 ...

  7. python socket编程 实现简单p2p聊天程序

    目标是写一个python的p2p聊天的项目,这里先说一下python socket的基础课程 一.Python Socket 基础课程 Socket就是套接字,作为BSD UNIX的进程通信机制,取后 ...

  8. socket实例C语言:一个简单的聊天程序

    我们老师让写一个简单的聊天软件,并且实现不同机子之间的通信,我用的是SOCKET编程.不废话多说了,先附上代码: 服务器端server.c #include <stdio.h> #incl ...

  9. 使用Python写的第一个网络爬虫程序

    今天尝试使用python写一个网络爬虫代码,主要是想訪问某个站点,从中选取感兴趣的信息,并将信息依照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,因为对python不 ...

随机推荐

  1. Macbook使用技巧

     Mac  OSX下 safari 常用快捷键盘     Command + R  刷新页面     Command + T  新建一个标签      Command + Shift+ 左右方向键   ...

  2. Delphi调用安装驱动sys的单元

    unit SysDriver; interface uses windows, winsvc; // jwawinsvc; Type TSysDriver = class(TObject) priva ...

  3. Python中:self和__init__的含义 + 为何要有self和__init__

    Python中:self和__init__的含义 + 为何要有self和__init__ 背景 回复: 我写的一些Python教程,需要的可以看看 中SongShouJiong的提问: Python中 ...

  4. 2014第7周四excel多列文本复制技巧

    刚才win8.1强制安装更新后重启,然后一直显示“安装更新失败正在,正在撤销更改,请不要关闭计算机”,等了很久还是不行,我还是强制按下了电源按钮,然后再次开机还是这样,实在没办法只能等,过了N久后没想 ...

  5. C++模板类中使用静态成员变量(例如Singleton模式)

    一个最简单Singleton的例子: ///////// Test.h /////////template <class _T>class CTest{private:_T n;stati ...

  6. codevs1166 矩阵取数游戏

    题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个 ...

  7. Java报表开发组件DynamicReports

    DynamicReports 是一个基于 JasperReports 进行扩展的 Java 报表库,可用它来快速创建报表而无需可视化报表设计工具. From :  http://www.oschina ...

  8. STL set接口中使用结构体类型

    需要在结构体中重载'<'运算符,下面是我写的一个例子: #include<iostream> #include<set> using namespace std; str ...

  9. asp.net 总结

    asp.net 是服务器段控件,运行是返回一个客户端html 页面给服务器

  10. 每个人应该知道的NVelocity用法

    NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象.从而使得界面设 ...