简单使用多线程和Socket,实现自动问答
2017-02-13 23:34
405 查看
我一直认为、线程的学习,光靠理论是非常枯燥的,但是线程的使用其实并不复杂,所以在这里我写这篇博客就是对线程做一个简单的应用,希望能对大家学习线程有帮助。
1、认识线程实现的两种方法。
我们都到线程有两种实现方法
1、继承Thread,重写Thread中的run方法,在run方法中要写入线程的方法体,不过要记住在eclipse中,重写方法钱要加一个@Override标记
2、实现Runnable接口,重写里面的run方法,就可以实现线程。这种方法也可以用匿名内部类的方式来实现Runnable r1 = new Runnable() {
重写的run方法体
}
这里我们用具体事例来看看,因为我们是跟Socket结合起来的,所以这里相当于一个socket客户端的线程体
首先第一种,继承Thread
接着是第二种,实现Runnable接口
2、SocketServer的编写
在我的另一篇文章中已经讲过Socket的使用,如果有疑惑的地方可以去看看,这里我只写一个SocketServer端,客户端我就直接使用 Security CRT 这个软件来连接我的服务端。
http://blog.csdn.net/franky_jie/article/details/54987285
3、效果截图
这样就可以实现自动问答,同时支持多个连接
1、认识线程实现的两种方法。
我们都到线程有两种实现方法
1、继承Thread,重写Thread中的run方法,在run方法中要写入线程的方法体,不过要记住在eclipse中,重写方法钱要加一个@Override标记
2、实现Runnable接口,重写里面的run方法,就可以实现线程。这种方法也可以用匿名内部类的方式来实现Runnable r1 = new Runnable() {
重写的run方法体
}
这里我们用具体事例来看看,因为我们是跟Socket结合起来的,所以这里相当于一个socket客户端的线程体
首先第一种,继承Thread
package com.mashensoft.thread.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class SocketThread02 extends Thread { Socket socket ; //构造方法,为本类中socket实例化 public SocketThread02(Socket socket) { this.socket = socket; } @Override public void run() { try { Scanner scan = new Scanner(socket.getInputStream()); PrintWriter pw = new PrintWriter(socket.getOutputStream()); pw.println("欢迎来到我的世界,你对力量一无所知"); pw.flush(); while(scan.hasNextLine()){ String msg = scan.nextLine(); if(msg.equalsIgnoreCase("exit")){ System.out.println("IP:"+socket.getInetAddress()+"已经退出"); break ; } //这里我们已经将方法封装好,客户端输入相应的内容,就会自动应答 String returnMsg = ServerSocketDemo.getReturnMsg(msg); pw.println(returnMsg); pw.flush(); } scan.close(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } }
接着是第二种,实现Runnable接口
package com.mashensoft.thread.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class SocketThread03 implements Runnable { Socket socket ; public SocketThread03(Socket socket) { this.socket = socket; } @Override public void run() { try { Scanner scan = new Scanner(socket.getInputStream()); PrintWriter pw = new PrintWriter(socket.getOutputStream()); pw.println("欢迎来到我的世界,你对力量一无所知"); pw.flush(); while(scan.hasNextLine()){ String msg = scan.nextLine(); if(msg.equalsIgnoreCase("exit")){ System.out.println("IP:"+socket.getInetAddress()+"已经退出"); break ; } String returnMsg = ServerSocketDemo.getReturnMsg(msg); pw.println(returnMsg); pw.flush(); } scan.close(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } }
2、SocketServer的编写
在我的另一篇文章中已经讲过Socket的使用,如果有疑惑的地方可以去看看,这里我只写一个SocketServer端,客户端我就直接使用 Security CRT 这个软件来连接我的服务端。
http://blog.csdn.net/franky_jie/article/details/54987285
package com.mashensoft.thread.socket; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * 功能:接受客户端的连接请求 * 当客户端连接上我们的端口之后,发送一个欢迎语 * 并且允许多个客户端连接上来 * @author Franky * */ public class ServerSocketDemo { public static void < 4000 span class="hljs-title">test2(){ try { //生成一个服务端对象,监听本地的8888端口 ServerSocket serverSocket = new ServerSocket(8888); while(true){ //生成一个客户端 Socket socket = serverSocket.accept(); //使用线程 Thread s1 = new Thread(new SocketThread03(socket)); s1.start(); } } catch (IOException e) { e.printStackTrace(); } } /** * 根据输入参数,返回指定的自动回复语 */ public static String getReturnMsg(String msg){ String returnMsg = "" ; if(msg==null){ return "" ; } if(msg.contains("在吗")){ returnMsg="所有商品都有货,24小时不在线,请随意!!!"; }else if(msg.contains("发货")){ returnMsg="爱等等,不等滚!!!"; }else if(msg.contains("包邮")){ returnMsg="都包邮"; }else if(msg.contains("hello")){ returnMsg="我不好"; }else if(msg.contains("buy")){ returnMsg="no zuo no die"; }else{ returnMsg="你大概不是在玩真的"; } return returnMsg; } public static void main(String[] args) { test2(); } }
3、效果截图
这样就可以实现自动问答,同时支持多个连接
相关文章推荐
- 使用 异步多线程TCP Socket 实现进程间通信(VC 6.0 , BCB6.0调试通过)
- Linux下使用socket传输文件的C语言简单实现
- C#中使用Socket实现简单Web服务器
- java使用多线程编程,实现socket服务器客户端交互
- 使用ClientSocket控件实现CSDN论坛帖子的自动回复
- 推荐下载:MSN机器人源代码(C#),含自动IP地址查询、简单自动问答等(添加详细使用)
- 使用socket实现简单的统计站点人数
- android使用socket实现简单的点对点通信
- [Unity3D]使用碰撞体做触发器实现简单的自动开门
- 推荐下载:MSN机器人源代码(C#),含自动IP地址查询、简单自动问答等(添加详细使用)
- Android-Socket多线程应用(聊天室客户端、Handler的简单使用)
- 简单的Client / Server 使用 linux 伯克利 socket实现
- 使用python多线程实现一个简单spider
- 多线程编程之使用工作线程实现文档自动保存(II)
- asterisk 使用php脚本socket通过AMI端口实现自动打电话报警
- 使用 异步多线程TCP Socket 实现进程间通信
- Linux下使用socket传输文件的C语言简单实现
- Unity3D使用碰撞体做触发器实现简单的自动开门
- ios使用GCD实现多线程的简单介绍
- Android-Socket多线程应用(聊天室客户端、Handler的简单使用)