2022年07月02日报告

本文介绍了如何使用Java实现一个简单的TCP聊天机器人系统,包括服务器端(TCPServer)和客户端(TCPChat)。服务器端监听特定端口,接收客户端消息,并根据预设规则回复。客户端通过GUI界面与服务器交互,提供文本输入和展示聊天记录。用户可以通过启动两个程序进行实时聊天体验。
摘要由CSDN通过智能技术生成

2022年07月01日讲到了使用TCP进行通讯 同学们

今天写一个低配版机器人聊天系统

这是个叫TCPServer的类

package com.langsin.TCPChat;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class TCPServer {
    private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static String getTime(){
        Date date=new Date();
        String time=dateFormat.format(date);
        return time;
    }
    //    TCP服务端 相当于智能机器人
    public static void main(String[] args) {
        try {
            List<String> checkList = new ArrayList<>();
            Scanner scanner = new Scanner(new File("./file/chat.txt"));
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                checkList.add(line);
            }
            scanner.close();
            ArrayList<String> overList = new ArrayList<>();
            overList.add("886");
            overList.add("再见");
            overList.add("回聊");
            overList.add("下次再聊");
            overList.add("走了");
//      ServerSocket是TCP的直接套接字实现类,客户端就是与这个对象建立连接通道
            ServerSocket server = new ServerSocket(8000);
            System.out.println("服务已启动...........");
//      客户端与服务端的Socket形成一对关系
            Socket socket = server.accept();
//      就是通过Socket中的IO流实现信息传递
//      客户端关闭之前 先给服务端发送一段结束信息 服务端接收后关闭socket 不再接收信息
            InputStream input = socket.getInputStream();
            OutputStream output = socket.getOutputStream();
//      所以 服务端的操作就是读取 读取后进行判断 然后进行输出
//      input是字节流 InputStream是转换为字符流
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            PrintWriter writer = new PrintWriter(output);
            while (true) {
//      先读取客户端发送过来的一行数据
                String line = reader.readLine();
//      如果读取不到数据 则程序会阻塞在这里
                boolean flag=false;
                for (String content : overList) {
                    if (line.contains(content)){
                        flag=true;
                        break;
                    }
                }
                if (flag){
                    break;
                }
                if (line.contains("吃") && (line.contains("东西") || line.contains("什么"))) {
                    writer.println(checkList.get(0));
                } else if (line.contains("跟我") && line.contains("看电影")) {
                    writer.println(checkList.get(1));
                } else if (line.contains("好看") && line.contains("电影")) {
                    writer.println(checkList.get(3));
                } else if (line.contains("我") && (line.contains("帅不帅") || line.contains("很帅"))) {
                    writer.println(checkList.get(5));
                } else if ((line.contains("我") || line.contains("姐姐")) && line.contains("漂亮 ")) {
                    writer.println(checkList.get(6));
                } else if (line.contains("你") && (line.contains("笨") || line.contains("丑")
                        )|| line.contains("傻")|| line.contains("草")) {
                    writer.println(checkList.get(4));
                }else if(line.contains("纯正")){
                    writer.println(checkList.get(7));
                }else {
                    writer.println(checkList.get(2));
                }
                writer.flush();
            }
//            服务端关闭socket
            socket.close();
            writer.println("智能 机器人 小艾 走了");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这是个叫TCPChat的类

package com.langsin.TCPChat;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class TCPChat {
    // 这是我们的聊天窗口类
    // 在JAVA的界面应用开发中 主要使用java.awt.* java.swing.* 这两个包下面的类
    private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public static String getTime(){
        Date date=new Date();
        String time=dateFormat.format(date);
        return time;
    }
    BufferedReader reader=null;
    PrintWriter writer=null;

    public TCPChat() {
        Socket socket=null;

        try {
            // 首先要与服务端建立连接
            // 这是客户端的socket套接字
            socket = new Socket("192.168.43.92",8000);
            reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer=new PrintWriter(socket.getOutputStream());

        } catch (IOException e) {
            e.printStackTrace();
        }

        // 建立一个窗口
        JFrame frame=new JFrame("TCP聊天窗口");

        frame.setSize(800,600);
        // 设置窗口不可拉伸
        frame.setResizable(false);
        // 设置窗口在中间出现
        frame.setLocationRelativeTo(null);
        // 使用绝对布局 放入组件时需要确定组件的位置
        frame.setLayout(null);
        // 加一个文本域
        JTextArea show = new JTextArea();
        // 设置文本域的字体
        Font font = new Font("楷体",Font.PLAIN,25);
        show.setFont(font);
        // 设置文本域只能读 不能改
        show.setEditable(false);

        // 加一个滚动条
        JScrollPane pane = new JScrollPane(show,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        // 这里请不要把pane设置得和界面一样宽 留一点给滚动条
        pane.setBounds(0,0,785,400);
        frame.add(pane);


        // 创建一个按钮
        JButton close=new JButton("关闭");
        close.setBounds(600,520,80,30);
        JButton send=new JButton("发送");
        send.setBounds(700,520,80,30);
        Font btnFont = new Font("微软雅黑",Font.PLAIN,17);
        close.setFont(btnFont);
        send.setFont(btnFont);

        // 这个文本域用于输入
        JTextArea input = new JTextArea();
        input.setBounds(0,410,794,100);
        input.setBorder(BorderFactory.createLineBorder(Color.black));
        input.setFont(btnFont);
        frame.add(input);
        frame.add(close);
        frame.add(send);

        // 如果需要给按钮添加功能  就需要加点击事件监听器
        send.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {// 事件对象
                ArrayList<String> list = new ArrayList<>();
                // 点击发送按钮后 发给服务器内容 然后再读一个内容
                String msg=input.getText();
                input.setText("");
                show.append("用户"+TCPServer.getTime()+":\n"+msg+"\n");
                // 把内容发送给服务端
                try {
                    writer.println(msg);
                    writer.flush();
                    String line=reader.readLine();
                    show.append("小艾说"+getTime()+":\n"+line+"\n");
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            }
        });
        // 加上这个方法  窗口才能显示出来
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) throws Exception{
        new TCPChat();
    }
}

然后在一个叫file的文件夹下新建一个叫chat.txt的文件

里面放上小艾要说的东西

小艾是机器人,小艾不吃东西,可是小艾也想知道食物的关味!
小艾也很喜欢看电影,小艾也很喜欢跟你一起看电影呢!
你能不能说得清楚一点?小艾看不懂.
小艾最近也没有关注过,不能给你很好的提示.
小艾很生气,小艾不理你了!
你是天下第一帅!小艾好喜欢你啊!
姐姐你也很漂亮,可是再要亮有什么用?又没有男朋友.
来点儿纯正的味儿 1966座头市 偶尔也有坏习惯 我爱拿生命做投掷!

 然后先打开TCPServer再打开TCPChat

就可以出现聊天窗口了

然后就实现了一个有点蠢的机器人聊天系统 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒂法挤挤挤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值