0

ソケット プログラミングを使用してクライアント サーバー アプリケーションをセットアップしようとしています。クライアントはサーバーに接続しますが、複数のイベント処理を機能させることができません。私のクライアント アプレットには、それぞれに関連付けられた 2 つのテキスト ボックスとボタンがあります。ボタン1をクリックすると、テキストボックスに「Hello」が表示されようとしていました。ボタン 2 をクリックすると、2 番目のテキスト ボックスに「こんにちは」が表示されようとしていました。ただし、両方のテキスト ボックスに 1 つの値 (最初にクリックした値) しか表示されません。私のイベント処理メカニズムは間違っていますか? 私はシリアライズ可能なインターフェースを実装しており、クライアントサーバー通信はオブジェクトを扱います。誰かがコードの問題が何であるか教えてもらえますか? ObjectCommunication.java コードを投稿していませんが、

どうもありがとう!

以下は私のサーバーコードです:

import java.io.*;
import java.net.*;

public class Server_App {
    public static void main(String[] args) {

        try {
            ServerSocket holder = new ServerSocket(4500);

            for (;;) {
                Socket incoming = holder.accept();
                new ServerThread(incoming).start();

            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

class ServerThread extends Thread

{

    public ServerThread(Socket i) {
        incoming = i;
    }

    public void run() {
        try {


            ObjectCommunication hold = new ObjectCommunication();

            ObjectInputStream input = new ObjectInputStream(incoming.getInputStream());

            ObjectOutputStream output = new ObjectOutputStream(incoming.getOutputStream());


            hold = (ObjectCommunication) input.readObject();

            if ((hold.getMessage()).equals("Event 1")) {

                System.out.println("Message read: " + hold.getMessage());

                hold.setMessage("Hello!");

            } else if ((hold.getMessage()).equals("Event 2")) {
                System.out.println("Message read:" + hold.getMessage());

                hold.setMessage("Hello there!");
            }

            output.writeObject(hold);

            input.close();

            output.close();

            incoming.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

    ObjectCommunication hold = null;
    private Socket incoming;

}

クライアントコードは次のとおりです。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Client_App extends Applet {
    TextField textVal;
    TextField anotherTextVal;
    Socket socket;
    ObjectCommunication hold = new ObjectCommunication();
    ObjectCommunication temp = new ObjectCommunication();
    ObjectOutputStream OutputStream;
    ObjectInputStream InputStream;

    public void init() {

        socketConnection();

        createGUI();

        validate();
    }

    public void socketConnection() {

        try {
            socket = new Socket("127.0.0.1", 4500);
        } catch (Exception e) {
            System.out.println("Unknown Host");
        }

        try {

            OutputStream = new ObjectOutputStream(socket.getOutputStream());
            InputStream = new ObjectInputStream(socket.getInputStream());

        } catch (IOException ex) {
            System.out.println("Error: " + ex);
            return;
        }


    }

    public void createGUI() {

        Button button = new Button("Hello Button");

        add(button);


        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                button_actionPerformed(evt);

            }
        });


        textVal = new TextField(6);
        add(textVal);

        Button anotherButton = new Button("Hello there Button");

        add(anotherButton);

        anotherButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {
                anotherButton_actionPerformed(evt);
            }

        });


        anotherTextVal = new TextField(6);
        add(anotherTextVal);


    }

    public void button_actionPerformed(ActionEvent e) {



        String actionCommand = e.getActionCommand();

        if (e.getSource() instanceof Button)
            if (actionCommand.equals("Hello Button")) {


                try {

                    temp.setMessage("Event 1");

                    //OutputStream.writeObject(temp); 

                    new SendToServer().start();

                    new ListenToServer().start();


                } catch (Exception ex) {
                    System.out.println("Communication didn't work!");
                }

                textVal.setText(hold.getMessage());
            }
    }

    public void anotherButton_actionPerformed(ActionEvent evt) {
        String action_Command = evt.getActionCommand();

        if (evt.getSource() instanceof Button)
            if (action_Command.equals("Hello there Button")) {


                try {

                    temp.setMessage("Event 2");

                    new SendToServer().start();

                    new ListenToServer().start();

                } catch (Exception ex) {
                    System.out.println("Communication didn't work!");
                }

                anotherTextVal.setText(hold.getMessage());
            }


    }

    class ListenToServer extends Thread {
        public void run() {
            while (true) {
                try {
                    hold = (ObjectCommunication) InputStream.readObject();
                } catch (IOException e) {} catch (ClassNotFoundException e2) {}
            }
        }
    }

    class SendToServer extends Thread {

        public void run() {
            while (true) {
                try {
                    OutputStream.writeObject(temp);
                } catch (IOException e) {}
            }
        }
    }



}
4

1 に答える 1