0

java.nio packageチャットアプリケーションに使用しています。ただし、ローカルホスト内の異なるクライアントにのみ接続できます。異なるIPアドレスから複数のクライアントを接続するにはどうすればよいですか?

現在、次のコードを使用してクライアントに接続しています。

InetAddress.getByName("10.10.10.172");

IPアドレスが10.10.10.123のクライアントからIPアドレスが10.10.10.124のサーバーにメッセージを送信できるようにしたいと思います。

ありがとう!

4

1 に答える 1

3

1台のパソコンと同じだと思います……。

始める前にもう1つ..10.10.10.777と10.10.10.888は無効なIPです

IPv4は、0〜255のドット付き10進形式です。

0-ネットワークアドレス255-BroadCastアドレス

0と255はPCにIPを与えるために使用されません... 1-254を使用してください。

そして、 1024を超えるポートを使用してみてください。これらのポートは既知のポートとして知られており、SMTP、FTP、HTTP、TELNETなどのさまざまなサービスを実行するために使用されます。

覚えていると思います…。

  1. ファイアウォールをオフにするか、サーバーを実行するポートのファイアウォールのルールに例外を追加します。

  2. サーバー側で複数のクライアントを処理するための個別のスレッドを作成します。

例:

The Server side code example:


public class ServerTest {

    ServerSocket s;

    public void go() {

        try {
            s = new ServerSocket(44457);

            while (true) {

                Socket incoming = s.accept();
                Thread t = new Thread(new MyCon(incoming));
                t.start();
            }
        } catch (IOException e) {

            e.printStackTrace();
        }

    }

    class MyCon implements Runnable {

        Socket incoming;

        public MyCon(Socket incoming) {

            this.incoming = incoming;
        }

        @Override
        public void run() {

            try {
                PrintWriter pw = new PrintWriter(incoming.getOutputStream(),
                        true);
                InputStreamReader isr = new InputStreamReader(
                        incoming.getInputStream());
                BufferedReader br = new BufferedReader(isr);
                String inp = null;

                boolean isDone = true;

                System.out.println("TYPE : BYE");
                System.out.println();
                while (isDone && ((inp = br.readLine()) != null)) {

                    System.out.println(inp);
                    if (inp.trim().equals("BYE")) {
                        System.out
                                .println("THANKS FOR CONNECTING...Bye for now");
                        isDone = false;
                        s.close();
                    }

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                try {
                    s.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }

        }

    }

    public static void main(String[] args) {

        new ServerTest().go();

    }

}

于 2012-07-02T04:20:42.247 に答える