为了账号安全,请及时绑定邮箱和手机立即绑定

Java TCP、IO流实现简单机器人聊天系统

标签:
Java

Java TCP、IO流实现简单聊天机器人系统




    (此系统基于java TCP信息传递,IO流实现人机聊天互动功能,词库可以自己加。)


二、主要知识点:

1、java.net
     类 Socket

    java.lang.Object          java.net.Socket

            此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

protectedSocket()通过系统默认类型的 SocketImpl 创建未连接套接字

protected

Socket(InetAddress address, int port)  创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
 InputStreamgetInputStream()   返回此套接字的输入流。

 OutputStreamgetOutputStream() 返回此套接字的输出流。
 voidclose()关闭此套接字。

2、java.net
     类 ServerSocket

        此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

    java.lang.Object      java.net.ServerSocket

 Socketaccept() 侦听并接受到此套接字的连接。
 voidclose() 关闭此套接字。

3、java.io
     类 OutputStream

    java.lang.Object      java.io.OutputStream

        此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。

voidwrite(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此输出流。
voidclose()关闭此输出流并释放与此流有关的所有系统资源。

4、java.io
     类 InputStream

    java.lang.Object          java.io.InputStream

         此抽象类是表示字节输入流的所有类的超类。

 intread(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
voidclose() 关闭此输入流并释放与该流关联的所有系统资源。

5、String 类的 getBytes()方法

 byte[]getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。     

6、java.io
     类 BufferedInputStream

    java.lang.Object      java.io.InputStream      java.io.FilterInputStream          java.io.BufferedInputStream

    BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 markreset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。

 

构造方法摘要
BufferedInputStream(InputStream in)创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

方法摘要
 intread(byte[] b)从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。
 voidclose() 关闭此输入流并释放与该流关联的所有系统资源。

三、包和词库:

        

    Chatbot.txt:词库文本(私信我发给你)

    MsgEx.txt  :聊天记录文本


四、代码:

   1、 客户端:

package com.chatbot_TCP;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.util.Scanner;/* * Chatbot 客户端 *  */public class ChatbotClient {    public static void main(String[] args) throws IOException {        System.out.println("欧巴你来了!");        boolean clientBL = true;        while(clientBL){            //创建Socket对象            Socket server = new Socket(InetAddress.getLocalHost(),123);                        //获取通道中的输出流            OutputStream clientOS = server.getOutputStream();            String clientStr = new Scanner(System.in).nextLine();            clientOS.write(clientStr.getBytes());            //获取通道中的输入流            InputStream clientIS = server.getInputStream();            byte [] clientByte = new byte[1024];            int clientLen = clientIS.read(clientByte);            System.out.println("静儿:"+new String(clientByte,0,clientLen));            if("再见".equals(clientStr) || "over".equalsIgnoreCase(clientStr)){                clientBL = false;            }            clientIS.close();            clientOS.close();        }        //server.close();    }}

2、服务器端

package com.chatbot_TCP;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;/* * Chatbot 服务器 */public class ChatbotServer {    public static void main(String[] args) throws IOException {        //创建ServerSocket对象        ServerSocket ss = new ServerSocket(123);        boolean bl = true;        while(bl){                        //使用ss调用accept方法,获取哪个客户端            Socket client = ss.accept();            //获取用户的输出流            InputStream is = client.getInputStream();            //使用输出流对象的read方法,读取数据            byte[] bt = new byte[1024];            int len = is.read(bt);            String clientStr = new String(bt,0,len);                        //获取通道中的输出流            OutputStream out = client.getOutputStream();                        //创建输入流缓冲流            BufferedReader br = new BufferedReader(new FileReader("Chatbot.txt"));            //创建输出流缓冲流            BufferedWriter bw = new BufferedWriter(new FileWriter("MsgEx.txt",true));            //DateFormat df = new SimpleDateFormat("HH:mm:ss");            //读取Chatbot.txt文本            String chatbot = null;            boolean enen = true;            while((chatbot = br.readLine())!=null){                                String[] chatbotSplit = chatbot.split("-");                if(clientStr.equalsIgnoreCase(chatbotSplit[0])){                    byte [] chatbotByte = chatbotSplit[1].getBytes();                    out.write(chatbotByte);                    bw.write("我:"+clientStr);                    bw.newLine();                    bw.write("静儿:"+chatbotSplit[1]);                    bw.newLine();                }else if("over".equalsIgnoreCase(clientStr) || "再见".equalsIgnoreCase(clientStr)){                    out.write("欧巴再见".length());                    bw.write("我:"+clientStr);                    bw.write("静儿:欧巴再见");                    bw.newLine();                    bl = false;                }else if("聊天记录".equals(clientStr) || "查看聊天".equals(clientStr)){                    BufferedInputStream bisMsgEx = new BufferedInputStream(new FileInputStream("MsgEx.txt"));                    OutputStream clientOut = client.getOutputStream();                    int lenMsgEx = 0;                    byte [] byteMsgEx = new byte[1024];                    while((lenMsgEx = bisMsgEx.read(byteMsgEx))!=-1){                        clientOut.write(byteMsgEx,0,lenMsgEx);                    }                }else{                    enen = false;                }                            }            if(!enen){                out.write("爱你哟".getBytes());                bw.write("静儿:爱你哟");                bw.newLine();            }            //释放资源            bw.close();            br.close();            out.close();            is.close();            client.close();        }        //ss.close();//服务器一直循环,不停止    }}


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消