客户端 - 服务器应用程序:无法从Android手机连接到java服务器

时间:2016-06-07 18:20:26

标签: java android client-server

我正在尝试从android手机(客户端)连接到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的代码时(我还将<uses-permission android:name="android.permission.INTERNET" />添加到AndroidManifest.xml):

    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。为什么我无法连接到服务器,是否有任何错误?

1 个答案:

答案 0 :(得分: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