文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java怎么实现聊天机器人

2023-06-20 13:26

关注

小编给大家分享一下Java怎么实现聊天机器人,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

具体内容如下

Java怎么实现聊天机器人

Client代码:

package GUISocket.chat.Client;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.EventQueue; import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JTextField;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.ScrollPaneConstants;import javax.swing.border.EmptyBorder; import java.awt.event.ActionListener;import java.awt.event.ActionEvent; public class ClientForm extends JFrame {  private JPanel contentPane; DefaultListModel<String> itemUsers; private JTextField textIP; private JTextField textPort; public JTextField textUser; public JTextArea textLog; public JList listUser; public JTextArea textSend ; public static void main(String[] args) {  EventQueue.invokeLater(new Runnable() {   public void run() {    try {     ClientForm frame = new ClientForm();     frame.setVisible(true);     ClientMG.getClientMG().setClientForm(frame);    } catch (Exception e) {     e.printStackTrace();    }   }  }); } public ClientForm() {  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  setBounds(100, 100, 589, 607);  contentPane = new JPanel();  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  setContentPane(contentPane);  contentPane.setLayout(null);    JLabel label = new JLabel("配置信息");  label.setBounds(10, 10, 54, 15);  contentPane.add(label);    JLabel lblIp = new JLabel("IP");  lblIp.setBounds(10, 35, 27, 15);  contentPane.add(lblIp);    textIP = new JTextField();  textIP.setText("192.168.1.6");  textIP.setBounds(33, 35, 92, 21);  contentPane.add(textIP);  textIP.setColumns(10);    JLabel label_1 = new JLabel("端口");  label_1.setBounds(137, 35, 38, 15);  contentPane.add(label_1);    textPort = new JTextField();  textPort.setText("8900");  textPort.setBounds(168, 32, 66, 21);  contentPane.add(textPort);  textPort.setColumns(10);    JLabel label_2 = new JLabel("用户名");  label_2.setBounds(255, 38, 54, 15);  contentPane.add(label_2);    textUser = new JTextField();  textUser.setBounds(302, 35, 66, 21);  contentPane.add(textUser);  textUser.setColumns(10);    JButton LOGIN = new JButton("登录");  LOGIN.setBounds(395, 34, 66, 23);  contentPane.add(LOGIN);    JButton btnClose = new JButton("关闭");  btnClose.setBounds(480, 31, 71, 23);  contentPane.add(btnClose);    JPanel panel = new JPanel();  panel.setBounds(0, 10, 573, 61);  contentPane.add(panel);  panel.setLayout(null);    JPanel panel_1 = new JPanel();  panel_1.setBounds(0, 81, 573, 369);  contentPane.add(panel_1);  panel_1.setLayout(null);    JLabel label_3 = new JLabel("聊天记录");  label_3.setBounds(10, 10, 54, 15);  panel_1.add(label_3);    JScrollPane scrollPane = new JScrollPane();  scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  scrollPane.setBounds(20, 35, 323, 324);  panel_1.add(scrollPane);    textLog = new JTextArea();  textLog.setWrapStyleWord(true);  textLog.setLineWrap(true);  scrollPane.setViewportView(textLog);    JLabel label_4 = new JLabel("在线用户");  label_4.setBounds(351, 10, 54, 15);  panel_1.add(label_4);    JScrollPane scrollPane_1 = new JScrollPane();  scrollPane_1.setBounds(353, 35, 210, 324);  panel_1.add(scrollPane_1);      this.itemUsers=new DefaultListModel<String>();  this.listUser=new JList(itemUsers);  scrollPane_1.setViewportView(this.listUser);      JPanel panel_2 = new JPanel();  panel_2.setBounds(10, 449, 553, 119);  contentPane.add(panel_2);  panel_2.setLayout(null);    JLabel label_5 = new JLabel("操作");  label_5.setBounds(10, 10, 54, 15);  panel_2.add(label_5);    JScrollPane scrollPane_2 = new JScrollPane();  scrollPane_2.setBounds(10, 22, 533, 64);  panel_2.add(scrollPane_2);    textSend = new JTextArea();  textSend.setWrapStyleWord(true);  textSend.setLineWrap(true);  scrollPane_2.setViewportView(textSend);    JButton button_1 = new JButton("群发");  button_1.addActionListener(new Button_1ActionListener());  button_1.setBounds(307, 86, 93, 23);  panel_2.add(button_1);    JButton sendMG = new JButton("发送");  sendMG.addActionListener(new SendMGActionListener());  sendMG.setBounds(432, 86, 93, 23);  panel_2.add(sendMG);    LOGIN.addActionListener(new ActionListener() {   public void actionPerformed(ActionEvent e) {    //连接服务器user    String IP=textIP.getText().trim();    int port=Integer.parseInt(textPort.getText().trim());    String user=textUser.getText().trim();        if(ClientMG.getClientMG().Connect(IP,port,user)) {     ClientMG.getClientMG().setLogTxt("已经连接到服务器");         }    else {     ClientMG.getClientMG().setLogTxt("连接服务器失败");    }   }  }); } private class SendMGActionListener implements ActionListener {  public void actionPerformed(ActionEvent e) {      //发送信息   //1.获取选择的用户名称   //2.发送给服务器端含有接收用户信息的交互协议串   String SenderName=ClientMG.getClientMG().getClientThd().getName();   String RecName=listUser.getSelectedValue().toString();   String MSGinfo=textSend.getText().trim();      String sMsg="MSG|"+SenderName+"|"+RecName+"|"+MSGinfo;   ClientMG.getClientMG().getClientThd().sendMsg(sMsg);   //将消息内容显示到聊天记录中   //[发送者]   //消息内容   //清空发送消息框   ClientMG.getClientMG().setLogTxt("[我]:");   ClientMG.getClientMG().setLogTxt(MSGinfo);      textSend.setText("");  } } private class Button_1ActionListener implements ActionListener {  public void actionPerformed(ActionEvent e) {   //群发信息   //1.获取选择的用户名称   //2.发送给服务器端含有接收用户信息的交互协议串   //发送到服务器,MSG|SenderName|RecName|MSGInfo   String SenderName=ClientMG.getClientMG().getClientThd().getName();   String RecName="ALL";   String MSGinfo=textSend.getText().trim();      String sMsg="MSG|"+SenderName+"|"+RecName+"|"+MSGinfo;   ClientMG.getClientMG().getClientThd().sendMsg(sMsg);   //将消息内容显示到聊天记录中   //[发送者]   //消息内容   //清空发送消息框   ClientMG.getClientMG().setLogTxt("[我]:");   ClientMG.getClientMG().setLogTxt(MSGinfo);      textSend.setText("");  } }  }

ClientMG代码:

package GUISocket.chat.Client; import java.net.Socket;  public class ClientMG { private static final ClientMG clientmg=new ClientMG(); private ClientMG() {} public static ClientMG getClientMG() {  return clientmg; }  private ClientForm clientWin; public void setClientForm(ClientForm c) {  clientWin=c; }  public void setLogTxt(String str) {  clientWin.textLog.append(str+"\r\n");   }  public void addItem(String user) {    clientWin.itemUsers.addElement(user); }  public void addItems(String[] users) {  for(int i=0;i<users.length;i++) {   clientWin.itemUsers.addElement(users[i]);  }  }  SocketThread sthd; public boolean Connect(String IP,int port,String user) {  Socket socket=null;  try {   socket=new Socket(IP,port);   sthd=new SocketThread(socket, user);   sthd.start();   return true;  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();   return false;  } }  public SocketThread getClientThd() {  return sthd; }}

SocketThread代码:

package GUISocket.chat.Client; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;   public class SocketThread extends Thread{ BufferedReader br=null; PrintWriter pw=null; Socket socket=null;  public SocketThread(Socket socket,String user){  super(user);//登录时用的用户名  this.socket=socket; }  public void run() {  try {   br=new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));   pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")));   String sLOGIN="LOGIN|"+this.getName();   sendMsg(sLOGIN);      String str="";   while((str=br.readLine())!=null) {    String[] commands=str.split("\\|");    if(commands[0].equals("USERLISTS")) {//USERLISTS|user1_user2_user3     String[] sUsers=commands[1].split("\\_");     ClientMG.getClientMG().addItems(sUsers);    }    else if(commands[0].equals("ADD")) {//ADD|UserName     String sNewUser=commands[1];     ClientMG.getClientMG().addItem(sNewUser);    }    else if(commands[0].equals("MSG")) {//格式 MSG|SenderName|MSGinfo     String SenderName=commands[1];     String MSGinfo=commands[2];     //将消息内容显示到聊天记录中     //[发送者]     //消息内容     ClientMG.getClientMG().setLogTxt("["+SenderName+"]");     ClientMG.getClientMG().setLogTxt(MSGinfo);    }    //ClientMG.getClientMG().setLogTxt(str);       }  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  }finally {   try {    if(pw!=null)     pw.close();    if(br!=null)     br.close();    if(socket!=null)     socket.close();   } catch (Exception e2) {    // TODO: handle exception   }  } } public void sendMsg(String str) {  pw.println(str);  pw.flush(); }}

ServerForm代码:

package GUISocket.chat.Server;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.EventQueue; import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.JButton;import javax.swing.JTextArea;import javax.swing.JScrollPane;import javax.swing.ScrollPaneConstants;import javax.swing.border.EmptyBorder;  import java.awt.event.ActionListener;import java.awt.event.ActionEvent; public class ServerForm extends JFrame {   private JPanel contentPane; public JTextArea textLog; private JTextField textPort; public static void main(String[] args) {  EventQueue.invokeLater(new Runnable() {   public void run() {    try {     ServerForm frame = new ServerForm();     frame.setVisible(true);     ServerMG.getServerMG().setServerForm(frame);    } catch (Exception e) {     e.printStackTrace();    }   }  }); }    public ServerForm() {  setTitle("多人聊天服务器");  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  setBounds(100, 100, 510, 566);  contentPane = new JPanel();  contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  setContentPane(contentPane);  contentPane.setLayout(null);    JLabel lblNewLabel = new JLabel("配置信息");  lblNewLabel.setBounds(20, 10, 54, 15);  contentPane.add(lblNewLabel);    JLabel label = new JLabel("端口:");  label.setBounds(30, 34, 39, 15);  contentPane.add(label);    textPort = new JTextField();  textPort.setText("8900");  textPort.setBounds(65, 31, 66, 21);  contentPane.add(textPort);  textPort.setColumns(10);    JButton btnStart = new JButton("开启服务");  btnStart.addActionListener(new BtnStartActionListener());  btnStart.setBounds(180, 30, 93, 23);  contentPane.add(btnStart);    JButton btnClose = new JButton("关闭服务");  btnClose.addActionListener(new BtnCloseActionListener());  btnClose.setBounds(325, 30, 93, 23);  contentPane.add(btnClose);    JPanel panel = new JPanel();  panel.setBounds(10, 10, 474, 54);  contentPane.add(panel);  panel.setLayout(null);    JLabel label_1 = new JLabel("消息记录");  label_1.setBounds(10, 94, 54, 15);  contentPane.add(label_1);    JPanel panel_1 = new JPanel();  panel_1.setBounds(0, 81, 474, 436);  contentPane.add(panel_1);  panel_1.setLayout(null);    JScrollPane scrollPane = new JScrollPane();  scrollPane.setBounds(10, 41, 464, 368);  panel_1.add(scrollPane);  scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);    textLog = new JTextArea();  textLog.setLineWrap(true);  textLog.setWrapStyleWord(true);  scrollPane.setViewportView(textLog);       } private class BtnCloseActionListener implements ActionListener {  public void actionPerformed(ActionEvent e) {     } } private class BtnStartActionListener implements ActionListener {  public void actionPerformed(ActionEvent e) {   //开启服务         int port=Integer.parseInt(textPort.getText().trim());      if(ServerMG.getServerMG().CreateServer(port)) {     ServerMG.getServerMG().setLogTxt("服务器开启...");   }   else {    ServerMG.getServerMG().setLogTxt("服务器开启失败...");   }  } }}

ServerListener代码:

package GUISocket.chat.Server; import java.net.ServerSocket;import java.net.Socket; public class ServerListener extends Thread{ Socket socket=null; ServerSocket server=null; public ServerListener(ServerSocket server) {  this.server=server; } public void run() {  try {   while(true) {    socket=server.accept();    ServerMG.getServerMG().setLogTxt("客户端: "+socket);      new SocketThread(socket).start();   }     } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } } }

SeverMG代码:

package GUISocket.chat.Server; import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList; import javax.swing.JTextArea; public class ServerMG { private static final ServerMG servermg=new ServerMG(); private ServerMG() {} public static ServerMG getServerMG() {  return servermg;   }  //主界面的操作 private ServerForm serverWin;  //将窗体对象注册到管理类当中 public void setServerForm(ServerForm s) {  serverWin=s; } //设置主界面 public void setLogTxt(String str) {  serverWin.textLog.append(str+"\r\n"); }  private ServerSocket server; public boolean CreateServer(int port) {  try {      server=new ServerSocket(port);   new ServerListener(server).start();   return true;  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();   return false;  } }  //ArrayList操作 ArrayList<SocketThread> a1OnlineList=new ArrayList<>();//存放所有和 public synchronized void addList(SocketThread sc) {  //限制重名  a1OnlineList.add(sc); }  public void clearList() {  a1OnlineList.clear(); }  public synchronized void removeList(SocketThread sc) {  for(int i=0;i<a1OnlineList.size();i++) {   SocketThread s=a1OnlineList.get(i);   if(s.equals(sc)) {    a1OnlineList.remove(sc);    break;   }  } }  //信息的管理 public void getOnlineNames(SocketThread sc) {  //非第1次登录时,得到所有的在线用户  if(a1OnlineList.size()>0) {   String sUsers="";//给客户端,USERLISTS|user1_user2_user3   for(int i=0;i<a1OnlineList.size();i++) {    SocketThread s=a1OnlineList.get(i);    sUsers+=s.getName()+"_";   }   sc.sendMsg("USERLISTS|"+sUsers);  }   } public void sendNewUsertoAll(SocketThread sc) {  for(int i=0;i<a1OnlineList.size();i++) {   SocketThread s=a1OnlineList.get(i);   s.sendMsg("ADD|"+sc.getName());  } } //通过Mame用户名查找目标 public SocketThread getSocketThreadByName(String sName) {  for(int i=0;i<a1OnlineList.size();i++) {   SocketThread s=a1OnlineList.get(i);   if(s.getName().equals(sName)) {    return s;   }  }  return null; }  //发送给所有人,但是要排除自身 public void sendMsgtoAll(String sMsg,SocketThread sc) {  for(int i=0;i<a1OnlineList.size();i++) {   SocketThread s=a1OnlineList.get(i);   if(!s.equals(sc)) {    s.sendMsg(sMsg);   }  } }  }

SocketThread代码:

package GUISocket.chat.Server; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket; public class SocketThread extends Thread{ BufferedReader br=null; PrintWriter pw=null; Socket socket=null; public SocketThread(Socket socket) {  this.socket = socket; }  public void run() {  try {   br=new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));   pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")));   String str="";   while((str=br.readLine())!=null) {//循环响应客户的发送信息//接受客户端发过来的信息    String [] commands=str.split("\\|");        if(commands[0].equals("LOGIN")) {//解析登录请求,格式,LOGIN|UserName     String sUSER=commands[1];     this.setName(sUSER);//将用户名信息放入Threadname中     //1.得到所有在线用户信息名称,发回客户端:USERLISTS|user1_user2_user3     ServerMG.getServerMG().getOnlineNames(this);     //2.将当前登录用户的信息(用户名),发送给已经在线的其他用户,ADD|userName          ServerMG.getServerMG().sendNewUsertoAll(this);     //3.将当前登录的Socket信息放入ArrayList中     ServerMG.getServerMG().addList(this);         }    else if(commands[0].equals("MSG")) {//格式:MSG|SenderName|RecName|MSGoinfo     String SenderName=commands[1];     String RecName=commands[2];     String MSGinfo=commands[3];     //群聊     if(RecName.equals("ALL")) {      String sMsg="MSG!"+SenderName+"|"+MSGinfo;//格式:MSG|SenderName|MSGinfo      ServerMG.getServerMG().sendMsgtoAll(sMsg,this);      ServerMG.getServerMG().setLogTxt(SenderName+"发送信息["+MSGinfo+"]到所有人。");     }     //私聊      else {       //通过RecName用户名查找,找到目标SocketThread       SocketThread sc=ServerMG.getServerMG().getSocketThreadByName(RecName);       if(sc!=null) {        //目标对象发送信息,MSG|SenderName|MSGinfo        String sMsg="MSG!"+SenderName+"|"+MSGinfo;        sc.sendMsg(sMsg);                //写入信息日志        ServerMG.getServerMG().setLogTxt(SenderName+"发送信息["+MSGinfo+"]到"+RecName);      }            }    }           }  } catch (Exception e) {   e.printStackTrace();  }finally {   try {    if(pw!=null)     pw.close();    if(br!=null)     br.close();    if(socket!=null)     socket.close();   } catch (Exception e2) {    // TODO: handle exception   }  } } public void closeChat() {  try {   if(pw!=null)    pw.close();   if(br!=null)    br.close();   if(socket!=null)    socket.close();  } catch (Exception e) {   e.printStackTrace();  } } public void sendMsg(String str) {  pw.println(str);  pw.flush(); }}

实现结果如下:

Java怎么实现聊天机器人

Java怎么实现聊天机器人

以上是“Java怎么实现聊天机器人”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯