Android Java 如何使用不同的网络/IP地址连接服务器

3

如何使用不同的IP地址连接服务器

我真的不知道该怎么办......

让我先解释一下。

如果我和我的计算机在同一个网络中,我有一个可以在客户端和服务器之间发送消息的工具,运行得非常好。

我有一台安卓设备,我想无论我离得远近,在我点击某个按钮时都能向服务器发送信息,即使我不在同一个网络中。

客户端

try {

                client = new Socket("IpAddress", 4444);
                BufferedReader in = new BufferedReader(
                        new InputStreamReader(client.getInputStream()));
                printlng = new PrintWriter(client.getOutputStream());
                printlng.println(mlng);
                printlng.flush();
                while (true) {
                    if ((Response= in.readLine()) != null) {
                        Log.i("Response:", Response);
                        dlng = Double.valueOf(Response);
                        System.out.println(dlng);

                        break;
                    }
                }

服务器:

public static void main(String[] args) {

    try {
        serverSocket = new ServerSocket(4444); // Server socket

    } catch (IOException e) {
        System.out.println("Could not listen on port: 4444");
    }

    System.out.println("Server started. Listening to the port 4444");

    while (true) {
        try {

            clientSocket = serverSocket.accept(); // accept the client
            inputStreamReader = new InputStreamReader(
                    clientSocket.getInputStream());
            bufferedReader = new BufferedReader(inputStreamReader); // get
                                                                    // the
            // client


            PrintWriter out = new PrintWriter(
                    clientSocket.getOutputStream(), true);
            InputStream inputStream = new ByteArrayInputStream(
                    bufferedReader.readLine().getBytes(
                            Charset.forName("UTF-8")));
            BufferedReader bufferedReader2 = new BufferedReader(
                    new InputStreamReader(inputStream));

            String output = bufferedReader2.readLine();
            System.out.println(output.toString());
            out.println(output.toString());
            out.flush();
            out.close();

            inputStreamReader.close();
            clientSocket.close();

        } catch (IOException ex) {
            System.out.println("Problem in message reading");
        }
    }

}
2个回答

1
你需要查找运行服务器的计算机的外部/互联网IP地址。你可以在该计算机上使用http://whatismyip.com来完成这个任务。在客户端中使用获取到的IP地址。但在它真正能够工作之前,你必须配置连接到计算机的路由器,将使用的端口转发到你的计算机的局域网IP地址。

0
如果在同一局域网上一切正常:问题可能来自某个防火墙规则不接受来自非本地IP的端口4444的连接。因此,要么更改服务器的端口(如果尚未使用,端口80可能是一个不错的选择,因为更有可能允许连接),要么更改防火墙规则。

连接成功了,但现在我又遇到了另一个问题,它显示 HTTP/1.0 400 错误请求。 - user3742672
你改变了防火墙规则或服务器端口吗? - ben75
请解释您的问题。您对4444端口有什么问题?不要犹豫,编辑问题。 - ben75
我只想在局域网之外与另一个网络通信。比如说,我在我的Wi-Fi网络(家庭)上工作,它可以正常工作,但如果我不在家,我希望它仍然能连接到服务器并且我能够进行通信。 - user3742672
如果我在两部安卓手机之间这样做,会起作用吗? - Sabri Meviş
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接