Android Socket服务器编程

标签 android sockets

我想通过套接字连接到我的 Android 应用程序。但在服务器端(Android 应用程序)我得到 java.net.SocketTimeoutException错误,在客户端我得到 java.net.ConnectException: Connection refused: connect错误。 我的错误是什么?谢谢

服务器(Android 应用程序)

public class ServerSocketTask extends AsyncTask<Void, Void, String> {
final StackTraceElement se = Thread.currentThread().getStackTrace()[2];

private String data = null;

@Override
protected String doInBackground(Void... params) {
    Log.d(se.getClassName() + "." + se.getMethodName(), "start");
    try {
        ServerSocket serverSocket = new ServerSocket(8989);
        serverSocket.setSoTimeout(50000);
        Socket socket = serverSocket.accept();
        socket.setKeepAlive(true);

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        int readed = in.read();
        Log.d("","readed bytes : "+readed);

        String line;
        while ((line = in.readLine()) != null){
            Log.i("","line : "+ line);
        }
        socket.close();
        serverSocket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    ServerSocketTask.this.data = result;
}

public String getData() {
    return data;
}

}

客户端

    public static void main(String[] args) {
    int port;
    try (Socket socket = new Socket("192.168.240.105", 8989)) {
        String customerId = "123";
        String requestId = Configuration.getProperty("requestId");
        ClientService result = new ClientService();
        String makeRequest = result.objectToJson(customerId, requestId);
        PrintWriter writer = new PrintWriter(socket.getOutputStream());
        writer.write(makeRequest);
        writer.flush();
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我的客户端无法连接到服务器,我的服务器正在等待连接。

最佳答案

当您构造 ServerSocket(8989) 时,您将绑定(bind)到 Android 模拟器/设备上可用的网络接口(interface)的通配符地址

然而,Android 模拟器和真实设备都有自己的网络接口(interface),因此它有自己的 IP 地址。您的客户端程序(开发机)IP地址与android模拟器/设备的IP地址不同。换句话说,您无法连接到 Android 应用程序中创建的套接字,因为您使用了错误的地址。

This answer应该指导您如何查找地址。

关于Android Socket服务器编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703464/

相关文章:

android - 当上传到 playstore : ResTable header size 0x0000 is too small

android - 无法将 firebase 存储集成到我的 android 应用程序

c++ - socket发送信息的时机(TCP、C++)

c - bind() 的 struct sockaddr_in 成员字节顺序

java - 使用 Java 是否需要创建套接字来获取远程主机 IP?

PHP 能够处理多个 TCP 连接吗?

android - Cordova 6.0.0 安卓 : INSTALL_FAILED_VERSION_DOWNGRADE

android - getLayoutInflater 与 LayoutInflater.from

android - Xamarin Android ExpandbleListView 添加子项

python - 如何在没有 WHILE 循环锁定程序的情况下让 UDP 服务器在 Python 3 中监听?