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

我认为它与您使用单台电脑的方式相同......

在我开始之前还有一件事.. 10.10.10.777 和 10.10.10.888 是无效 IP

IPv4 采用点分十进制格式,范围为 0-255

0 - 网络地址 255 - 广播地址

0 和 255 不用于将 ip 分配给 pc ...使用 1 - 254。

尝试使用 1024 以上的端口,这些端口被称为 Well-Known 端口,用于运行各种服务,如 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 回答