simplechatclient.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 202 行

JAVA
202 行
字号
     import java.io.*;
     import java.applet.*;
     import java.awt.*;
     import java.awt.event.*; 
     import java.net.*;
     import java.util.*;

     public class SimpleChatClient extends Applet implements ActionListener
     {
          // 服务器或者其他聊天服务所保留的句柄数组
          public static final String[] reservedHandles = { "Server" };

          // 用户的"句柄", 或者昵称
          protected String handle;

          // 用于在多点传送群中通信用的MulticastConnection
          protected MulticastConnection client;

          // 显示欢迎消息用的文本域 
          protected TextArea textArea;
       
          // 用于打印离开消息的域
          protected TextField input;

          // 发送消息用的按钮
          protected Button send;

          // 允许客户切换消息回显方式
          protected Checkbox echo;

          // 多点传送群地址          
          protected String address;
          
          // 用给定的句柄和地址创建一个新的SimpleChatClient         
          public SimpleChatClient(String clientName, String addr) throws Exception
          {
               address = addr;
               handle  = clientName;
          }

          public void init()
          {
               // 创建控制I/O的小部件

               textArea = new TextArea("", 15, 80, TextArea.SCROLLBARS_VERTICAL_ONLY);
               textArea.setEditable(false);
               add(textArea);

               Panel p = new Panel();
               input = new TextField("", 80);
               // 注册输入框在回车键按下时发送消息
               input.addKeyListener(new KeyAdapter()
                    {
                         public void keyTyped(KeyEvent e)
                         {
                              if(e.getKeyChar() == '\n')
                              {  
                                   sendMessage(input.getText());
                                   input.setText("");
                              } 
                         }
                    } );  

               p.add(input);
        
               send = new Button("Send");
               send.addActionListener(this);
               p.add(send);

               add(p);

               echo = new Checkbox("Echo responses", true);
               add(echo);

               // 连接到多点传送群
               try
               {
                    textArea.append("System Message: connecting to " + address + " : " + 
                                    MulticastConnection.DEFAULT_PORT + "...\n");

                    client = new MulticastConnection(address, MulticastConnection.DEFAULT_PORT);

                    textArea.append("System Message: successfully connected to server!\n");
               }
               catch(Exception e)
               {
                    textArea.append("System Error: Could not connect to Chat Server! " + e + "\n");
                    send.setEnabled(false);
               }
          }

          // 接收从多点传送群过来的消息
          public void start()
          {
               // 接收到的消息
               String msg = "";

               // 确保我们仍然在线
               while(send.isEnabled()) 
               {
                    msg = client.recv();

                    // 检查客户端是否允许回显
                    if(echo.getState() == false)
                    {
                        // 不要接收我们发送的消息
                        if(! msg.startsWith("<" + handle + ">:"))
                        {
                             textArea.append(msg+"\n");
                        }
                    }
                    else
                    {
                         textArea.append(msg+"\n");
                    }
               }

               textArea.append("System Message: disconnected from Chat Server!\n");
          }

          public void destroy()
          {
               // 断开客户端
               client.disconnect();
          }

          // 尝试发送指定的消息
          public void sendMessage(String msg)
          {
               // 如果消息只是空格的话则不发送
               if(! "".equals(msg.trim()))
               {
                    // 发送用户的句柄和消息
                    if(! client.send("<" + handle + ">: " + msg.trim()))
                    {
                         disconnect();
                    }
               }
          }

          public void disconnect()
          {
               client.disconnect();
               send.setEnabled(false);
          }

           
          public void actionPerformed(ActionEvent e)
          {
               sendMessage(input.getText());
               input.setText("");
          }

          public static void main(String[] args) throws Exception
          {
               // 得到用户的句柄

               String name = "";
               BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

               System.out.print("Enter your name: ");
               final String[] handles = SimpleChatClient.reservedHandles;
               name = reader.readLine();

               boolean usingReservedHandle = true;

               // 确保用户输入的是一个还没使用的昵称
               while(usingReservedHandle)
               {
                    usingReservedHandle = false;
                    for(int i = 0; i < handles.length; i++)
                    {
                         if(name.equals(handles[i]))
                         {
                              usingReservedHandle = true;
                              System.out.print(name + " is a reserved handle; try another: ");
                              name = reader.readLine();
                              break;
                         }
                    }
               }
                              
               // 创建一个新的SimpleChatClient并把它加载到一个Frame中

               Applet a = new SimpleChatClient(name, "224.0.0.21");

               a.init();
               Frame f = new Frame("Java Chat Client - <" + name + ">");
               f.setSize(650, 400);
               f.addWindowListener(new WindowAdapter()
                    {
                         public void windowClosing(WindowEvent e) 
                         {
                              System.exit(0);
                         }
                    } );

               f.add(a);
               f.show();
               a.start();
          }
     }    // SimpleChatClient

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?