【问题标题】:Client-Server application: can't connect to java server from android mobile phone客户端-服务器应用程序:无法从 android 手机连接到 java 服务器
【发布时间】:2016-10-07 18:45:40
【问题描述】:

我正在尝试从安卓手机(客户端)连接到 java(服务器)。 服务器代码:

import java.net.*;

/**
* Created by mwalko on 07.06.16.
*/
public class Main {
 public static void main(String[] args)
 {
    try
    {
        ServerSocket sock = new ServerSocket (8601);
        for (;;)
        {
            Socket newsock = sock.accept();
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
  }
}

那我就可以通过 cURL 和它对话了:

curl localhost:8601
Hello :: enter QUIT to exit 

From server: GET / HTTP/1.1. 

From server: Host: localhost:8601. 

From server: User-Agent: curl/7.47.0. 

From server: Accept: */*. 

From server: .

但是当我尝试从适用于此代码的 android 进行连接时(我还在 AndroidManifest.xml 中添加了<uses-permission android:name="android.permission.INTERNET" />):

    new Thread() {
        @Override
        public void run() {
            try {
                Socket s = new Socket("192.168.1.102", 6000);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();

我收到一个错误:

06-07 20:09:03.530 7319-7319/com.example.root.client E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.example.root.client, PID: 7319
                                                                   06-07 21:45:20.990 25482-25520/com.example.root.client W/System.err: java.net.ConnectException: failed to connect to /192.168.1.102 (port 6000): connect failed: ECONNREFUSED (Connection refused)

我可以通过电话 ping 192.168.1.101。为什么连接不上服务器,有什么BUG吗?

【问题讨论】:

    标签: java android client-server


    【解决方案1】:

    如果您在调试控制台中阅读错误消息,它会说明。

    无法连接到 /192.168.1.102(端口 6000):连接失败: ECONNREFUSED(连接被拒绝)

    您的服务器代码有一个用于端口 8601 的套接字,这意味着它在该端口而不是 6000 上期待请求。将您的 android 请求端口更改为 8601,或将服务器侦听端口更改为 6000。

    您还声明您可以 ping 192.168.1.101,但在 java 客户端中您正在创建到 IP 192.168.1.102 的连接。例如,如果服务器代码在 192.168.1.101 上运行,那么来自 android 客户端(本例中为 192.168.1.102)的每个请求都应转发到 192.168.1.101,通过8601端口,通常写成:192.168.1.101:8601

    【讨论】:

    • 是的,你写的是真的,但这是编辑问题。我尝试了两个端口(6000 和 8601)来监听和连接,我的意思是我在客户端获得了端口 6000,在服务器上获得了 6000,然后将两者都更改为 8601。我确定路由器上的端口被阻塞或其他东西有问题。总之是个好帖子! PS我ping 192.168.1.102(电脑ip),我的错
    猜你喜欢
    • 2014-11-19
    • 2020-06-17
    • 1970-01-01
    • 2022-01-21
    • 2016-07-07
    • 1970-01-01
    • 2018-10-14
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多