【问题标题】:Android java How to connect to server with different network/ip addressAndroid java如何连接到具有不同网络/ IP地址的服务器
【发布时间】:2023-04-04 13:30:02
【问题描述】:

如何连接到不同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");
        }
    }

}

【问题讨论】:

    标签: java android networking client


    【解决方案1】:

    您必须找出运行您的服务器的电脑的外部/互联网 IP 地址。您可以使用http://whatismyip.com 在该电脑上执行此操作。在您的客户端中使用获得的 ip。但是在它真正可以工作之前,您必须配置您的电脑连接到的路由器,以将使用的端口转发到您的电脑的局域网 IP 地址。

    【讨论】:

      【解决方案2】:

      如果在同一个 LAN 上一切正常:问题可能是由于某些防火墙规则在来自非本地 IP 时不接受端口 4444 上的连接。

      因此,要么更改服务器的端口(如果尚未使用,端口 80 可能是一个不错的选择,因为允许连接的机会更大),要么更改您的防火墙规则。

      【讨论】:

      • 它连接好了,但现在我遇到了另一个问题,它说 HTTP/1.0 400 Bad Request
      • 您是否更改了防火墙规则或服务器端口?
      • 不会工作..感谢重播而且当我改回端口 4444 时它会工作,但如果我改回端口 80 就不会了..
      • 请澄清您的问题。端口 4444 有什么问题。不要犹豫,编辑问题。
      • 我只想在局域网之外与不同的网络进行通信让我说我在我的 wifi 网络(家庭)上并且它工作但我希望如果我不在家我想要它仍然可以连接到服务器,我将能够通信。
      猜你喜欢
      • 2011-10-12
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多