1

Java でアプレットを使用して簡単なテキスト チャット アプリケーションを開発しました。2 つのファイルで構成されています。

  1. server.java-> サーバー部分にアクセスする
  2. client.java-> クライアント部分にアクセスする

両方のアプレットを開いた後、サーバーとクライアントの間でチャットを行うことができます。

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();
              }        
                 }

私が知りたいのは、2 台の異なるコンピューターでチャットにアクセスする方法です。出来ますか?

あるコンピューターに server.java と別のコンピューターに client.java が必要です。どなたか解決策があれば教えてください。お気軽にご質問ください。

4

2 に答える 2