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