使用ServerSocket实现自动回复机器人
2017-02-15 14:23
399 查看
先开启Tomcat
Tomcat的开启参考下面链接里的第二步
http://blog.csdn.net/children_of_light/article/details/55004917
开启完Tomcat一定要记得开启服务啊啊 啊啊啊啊啊 啊啊 啊啊
关键代码
写一个简单的方法。实现简单的自动回复
获取msg传值,先做一个简单的if判断语句库,这里只写很简短的例子
接下来的代码则要在客户端获取输入流,并调用上面的方法传回返回值在放在输出流上
写完上面两个方法,我们就可以从Tomcat的服务Run程序就可以从客户端连接进本地服务端,来测试这个简单的自动答复机器人。
因为我们进行的是java的学习,所以用的比较多的是linux,所以可以直接在安装有Tomcat的Linux系统输入命令
Telnet 192.168.xx.xxx 8888
便可以连接服务端
不过我简易下载一个CRT工具来连接
因为在linux下的编码格式和eclipse的编码格式不同,会出现乱码,如果在CRT下,我们可以更改命令行的编码格式,以方便测试
多线程实现多人访问自动回复机器人
怎么样才能让程序想微信啊淘宝客服一样同时允许多个客户端接入呢?
下面就要用到多线程了
改造一下代码,将Test1方法改造成如下代码
上面的方法只负责端口的监视和客户端的连接。
在while循环里我们会调用实现方法
while(ture)是为了在客户端退出是不直接退出程序,等待下一个客户端的连接
新建一个类继承多线程
新建一个类,继承多线程
构造run()方法
Tomcat的开启参考下面链接里的第二步
http://blog.csdn.net/children_of_light/article/details/55004917
开启完Tomcat一定要记得开启服务啊啊 啊啊啊啊啊 啊啊 啊啊
关键代码
写一个简单的方法。实现简单的自动回复
获取msg传值,先做一个简单的if判断语句库,这里只写很简短的例子
public static String getReturnMsg(String msg){ if (msg == null) { return ""; } String returnMsg = "" ; if (msg.contains("在吗")) { returnMsg = "我傻仔聪全天候在线,亲,摸摸大"; }else if(msg.contains("你多大")){ returnMsg = "长18米,宽1毫米"; }else if(msg.contains("我帅不帅")){ returnMsg = "帅到嗨甘啦"; }else{ returnMsg = "跟你不熟,并抛出一个异常"; } return returnMsg; }
接下来的代码则要在客户端获取输入流,并调用上面的方法传回返回值在放在输出流上
/** * 接受客户端连接请求 * 客户端连上后,发送欢迎 * 客户端发信息,服务端自动回复 * 允许多个客户端连接 */ public static void test1(){ //生成一个服务端对象,监听本地的8888端口 try { //服务端 ServerSocket serverSocket = new ServerSocket(8888); //while(ture)是为了在客户端退出是不直接退出程序,等待下一个客户端的连接 while(true){ //客户端 //接受一个客户端 Socket socket = serverSocket.accept(); //先发送一个欢迎过去 //获取输出流 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.println("欢饮来到傻仔聪的世界,这里有五毛一斤的葱头出售哦"); pw.flush();//刷新 //获取客户端输入流 InputStream is = socket.getInputStream(); Scanner sc = new Scanner(is); while (sc.hasNextLine()) { String msg = ""; msg = sc.nextLine(); //如果客户端发来exit 哈希循环,关闭连接 //忽略大小写。equal相等参数的方法 if (msg.equalsIgnoreCase("exit")) { System.out.println("断开连接"); break;//跳出哈希循环 } //调用机械回复方法,传参。msg String returnMsg = getReturnMsg(msg); pw.println("商家:" + returnMsg); pw.flush(); } pw.close(); is.close(); os.close(); } //发送完毕 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
写完上面两个方法,我们就可以从Tomcat的服务Run程序就可以从客户端连接进本地服务端,来测试这个简单的自动答复机器人。
因为我们进行的是java的学习,所以用的比较多的是linux,所以可以直接在安装有Tomcat的Linux系统输入命令
Telnet 192.168.xx.xxx 8888
便可以连接服务端
不过我简易下载一个CRT工具来连接
因为在linux下的编码格式和eclipse的编码格式不同,会出现乱码,如果在CRT下,我们可以更改命令行的编码格式,以方便测试
多线程实现多人访问自动回复机器人
怎么样才能让程序想微信啊淘宝客服一样同时允许多个客户端接入呢?
下面就要用到多线程了
改造一下代码,将Test1方法改造成如下代码
/** * 改造成多线程 * 接受客户端的连接请求吗,当客户端连上后,输出欢饮语句,接受信息,自动回复信息 * 允许多个客户端连接 * @param args */ public static void test2(){ // 生成一个服务端对象,监听本地的8888端口 try { ServerSocket serverSocket = new ServerSocket(8888); while (true) { // 接收一个客户端的连接 Socket socket = serverSocket.accept(); SocketThread st = new SocketThread(socket); st.start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); // 发送完毕 } }
上面的方法只负责端口的监视和客户端的连接。
在while循环里我们会调用实现方法
while(ture)是为了在客户端退出是不直接退出程序,等待下一个客户端的连接
新建一个类继承多线程
新建一个类,继承多线程
构造run()方法
import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; /** * 多线程准备 * @author Administrator * */ //创建SocketThread类继承Thread public class SocketThread extends Thread{ //创建Socket对象 Socket socket = null; //构造方法 public SocketThread(Socket scoket){ this.socket = socket; } //run方法 @Override public void run() { //printwriter 获取输出流 PrintWriter pw; try { pw = new PrintWriter(socket.getOutputStream()); //输出欢饮语句 pw.println("欢饮来到傻仔聪的世界,这里有五毛一斤的葱头出售哦"); pw.flush(); //scanner获取输入流 Scanner sc = new Scanner(socket.getInputStream()); //哈希 string个msg while(sc.hasNextLine()){ String msg = sc.nextLine(); //创建 returnsrting 获取数据 String returnMsg = ServerSocketDemo.getReturnMsg(msg); //print输出 pw.println(returnMsg); pw.flush(); //判断语句相等就跳出循环 if ("exit".equalsIgnoreCase(msg)) { break; } //关闭服务 sc.close(); pw.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 使用ClientSocket控件实现CSDN论坛帖子的自动回复
- 使用ClientSocket控件实现CSDN论坛帖子的自动回复
- 使用ClientSocket控件实现CSDN论坛帖子的自动回复(修改)
- 使用 ServerSocketChannel 实现的 File 服务器
- 使用Jetty搭建Java Websocket Server,实现图像传输
- 简单的Client / Server 使用 linux 伯克利 socket实现 编辑
- 使用shell脚本检测lvs中realserver状态,并实现自动删除已挂机主机
- asterisk 使用php脚本socket通过AMI端口实现自动打电话报警
- Python实现微信自动回复机器人
- 微信接入机器人实现对别人消息和群at消息的自动回复
- Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
- 使用ServerSocketChannel与SocketChannel实现的CS模式
- 使用 ServerSocketChannel 实现的 File 服务器
- Python实现微信自动回复(机器人版本)
- python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
- 微信公众号后台java开发实现自动回复机器人
- 使用线程池实现Server端,Socket编程?
- 简单的Client / Server 使用 linux 伯克利 socket实现
- linux下使用socket实现点对点通信的实验(server to client)