简单的文字聊天应用

时间:2013-03-31 13:43:03

标签: java applet

我使用java中的applet开发了简单的文本聊天应用程序。它由两个文件组成。

  1. server.java->访问服务器部分
  2. client.java->访问客户端部分
  3. 打开两个小程序后,可以在服务器和服务器之间进行聊天。客户端。

    Here's my server side code:
    
        Serverfile.java
    
        import java.net.*;
        import java.io.*;
        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;
    
        public class serverfile extends JFrame {
        private JTextField usertext;
        private JTextArea chatwindow;
        private ObjectOutputStream output;
        private ObjectInputStream input;
        private ServerSocket server;
        private Socket connection;
    
        public serverfile(){
        super("server messaging system");    
        usertext= new JTextField();
        usertext.setEditable(false);
        usertext.addActionListener( new ActionListener(){
        public void actionPerformed(ActionEvent event){
        sendmessage(event.getActionCommand());
        usertext.setText("");
          }
        }
        );
        add(usertext,BorderLayout.SOUTH);
        chatwindow= new JTextArea();
        add(new JScrollPane(chatwindow));
        setSize(300,250);
        setVisible(true);
        }
    
       public void startrunning(){
       try{
       server= new ServerSocket(6789,100);
       while(true){
       try{
       waitForConnection();
       setupstream();
       whilechatting();
       }catch(Exception e){
       System.out.println("you have an error in coversation with client");
       }finally{
       closecrap();
       }
       }
       }
       catch(Exception e){
       System.out.println("you have an error in connecting with client");
       }
       }
       private void waitForConnection() throws IOException{
    
       showmessage("waiting for someone to connect");
       connection= server.accept();
       showmessage("now connected to"+connection.getInetAddress().getHostName());
       }
    
       private void setupstream() throws IOException{
    
       output= new ObjectOutputStream(connection.getOutputStream());
       output.flush();
       input= new ObjectInputStream(connection.getInputStream());
       showmessage("\n streams are setup");
       }
    
       private void whilechatting()throws IOException{
    
       String message = "\n you are now connected";
       sendmessage(message);
       ableToType(true);
       do{
       try{
       message = (String)input.readObject();
       showmessage("\n"+message);
       catch(Exception e){
       System.out.println("\n error in reading message");
       }
       }while(!message.equals("CLIENT-END"));
       }
    
       private void closecrap(){
    
       showmessage("\nclosing connection");
       ableToType(false);
       try{
       output.close();
       input.close();
       connection.close();
       }catch(Exception e){
       System.out.println("\n error in closing server");
    
       }
       }
    
       private void sendmessage(String message){
    
       try{
       output.writeObject("SERVER-"+message);
       output.flush();
       }catch(Exception e){
       chatwindow.append("\n error in sending message from server side");
       }
       }
    
       private void showmessage(final String text){
    
       SwingUtilities.invokeLater( new Runnable(){
       public void run(){
       chatwindow.append(text);
       }
        }
       );
        }
    
       private void ableToType(final boolean tof){
    
       SwingUtilities.invokeLater( new Runnable(){
        public void run(){
        usertext.setEditable(tof);
        }
        }
        );
        }
        }
    
    
        Server.java-> which access serverfile code:
    
        import javax.swing.JFrame
    
         public class server {
          public static void main(String args[]){
          serverfile obj1= new serverfile();
          obj1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         obj1.startrunning();
             }    
               }
    

    我的客户端代码:

        Clientfile.java
    
        import java.net.*;
        import java.io.*;
        import java.awt.*;
         import java.awt.event.*;
          import javax.swing.*;
    
            public class clientfile extends JFrame {
              private JTextField usertext;
              private JTextArea chatwindow;
              private ObjectOutputStream output;
               private ObjectInputStream input;
              private String message="";
                private String serverIP;
                private ServerSocket server;
                   private Socket connection;
    
                 public clientfile(String host){
                  super("client messaging system");  
                 serverIP=host;
                usertext= new JTextField();
     usertext.setEditable(false);
     usertext.addActionListener( new ActionListener(){
     public void actionPerformed(ActionEvent event){
         sendmessage(event.getActionCommand());
         usertext.setText("");
          }
     }
     );
     add(usertext,BorderLayout.SOUTH);
     chatwindow= new JTextArea();
     add(new JScrollPane(chatwindow));
     setSize(300,250);
     setVisible(true);
    }
    
            public void startrunning(){
                try{
           connecttoserver();
             setupstream();
              whilechatting();
            }catch(Exception e){
             System.out.println("you have an error in coversation with server");
                }
               finally{
               closecrap();
                   }
                   }
                private void connecttoserver() throws IOException{
              showmessage("attempting connection");
              connection= new Socket(InetAddress.getByName(serverIP),6789);
             showmessage("connected to"+connection.getInetAddress().getHostName());
               }
                 private void setupstream() throws IOException{
                 output= new ObjectOutputStream(connection.getOutputStream());
              output.flush();
                input= new ObjectInputStream(connection.getInputStream());
            showmessage("\n streams are good to go");
                  }
    
              private void whilechatting()throws IOException{
             ableToType(true);
                do{
               try{
               message = (String)input.readObject();
                 showmessage("\n"+message);
            }catch(Exception e){
              System.out.println("\n error in writing message");
                }
            }while(!message.equals("SERVER - END"));
                 }
    
            private void closecrap(){
           showmessage("\nclosing....");
             ableToType(false);
                  try{
            output.close();
            input.close();
             connection.close();
             }catch(Exception e){
              System.out.println("\n error in closing client");
           }
              }
             private void sendmessage(String message){
               try{
              output.writeObject("CLIENT-"+message);
               output.flush();
               }catch(Exception e){
               chatwindow.append("\n error in sending message from client side");
                 }
                   }
                private void showmessage(final String m){
                 SwingUtilities.invokeLater( new Runnable(){
                 public void run(){
                chatwindow.append(m);
               }
                  }
                     );
                           }
    
                   private void ableToType(final boolean tof){
               SwingUtilities.invokeLater( new Runnable(){
                   public void run(){
                   usertext.setEditable(tof);
                  }
                }
                   );
                   }
                  }
    
    
    
        Client.java-> access client file code
    
               import javax.swing.JFrame;
    
              public class client {
               public static void main(String args[]){
             clientfile obj2= new clientfile("127.0.0.1");
              obj2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                obj2.startrunning();
                  }        
                     }
    

    我想知道的是如何在两台不同的计算机上访问聊天?有可能吗?

    我想在一台计算机上安装server.java&另一台计算机上的client.java。如果有人有任何解决方案,请告诉我。随意问的问题。

2 个答案:

答案 0 :(得分:1)

是的,它可以在两台主机中运行服务器和客户端 更改您的client类以某种方式接受服务器的IP - 通过命令行争论,通过键盘输入等 - 而不是硬编码“127.0.0.1”,这是localhost

import javax.swing.JFrame;

public class client {
    public static void main(String args[]){
        clientfile obj2= new clientfile(args[0]); // taken from command line args
        obj2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        obj2.startrunning();
    }        
}

java client 192.168.0.3运行客户端,其中192.168.0.3需要用运行服务器的主机的私有IP替换。
可以通过在Windows中执行ipconfig或在Linux / Ubuntu中执行ifconfig来获取主机运行服务器的IP。

答案 1 :(得分:1)

假设您的服务器程序在带有110.10.9.8的系统上运行(只是一个示例) 在客户端代码行connection= new Socket(InetAddress.getByName(serverIP),6789);中,将InetAddress.getByName(serverIP)替换为110.10.9.8。 要知道服务器系统的IP,只需在goole中键入“我的IP是什么”。 请记住,每次调制解调器或路由器重新启动时,它的动态IP都会更改。所以你必须每次都找到IP。 如果您想要获得与静态IP类似的内容,请访问this