套接字连接错误 'null',Android

Error 'null' in sockets connection , Android

我想做什么:
我正在尝试构建一个测试应用程序,现在,只需在 Android phone (4.2.2)(作为客户端)上的应用程序和 java 应用程序 运行 在 pc 上(windows 8)(作为服务器)通过套接字连接。

我已经做了什么:
我已经在 pc 上 java 为客户端和服务器制作了程序并对其进行了积极测试(已建立连接)。

网络:
我的 phone 和电脑都连接到我家的 wifi。电脑上的 ipconfig 在登录路由器时显示地址 192.168.56.1它显示我的电脑地址是 192.168.0.108(可能我不懂网络 :P)。

代码:
客户端(Android)

public void connectPC(View view)
{
    try
    {

        clientSocket = new Socket("192.168.0.108",1025);
        outstream = clientSocket.getOutputStream();
        instream = clientSocket.getInputStream();
        data_out = new DataOutputStream(outstream);
        data_in = new DataInputStream(instream);
        statusView.setText("Connected!");
    }
    catch (Exception e)
    {
        statusView.setText("Error: "+e.getMessage());
    }
}

服务器:

import java.net.*;
import java.io.*;
public class ServerSide extends Thread
{
    ServerSocket serverSocket;
    public ServerSide(int port) throws IOException
    {
        serverSocket = new ServerSocket(1025);
        serverSocket.setSoTimeout(10000);
    }

    public void run()
    {
        while(true)
        {
            System.out.println("Waiting for client on port : "+ serverSocket.getLocalPort());
            Socket server;
            try {
                server = serverSocket.accept();
                System.out.println("Connected to : " +server.getRemoteSocketAddress());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println(e.getMessage());
            }

        }
    }

    public static void main(String... args)
    {
        int port=6066;
        try
        {
            Thread t = new ServerSide(port);
            t.start();
        }
        catch(IOException e)
        {
            System.out.println(e.getMessage());
        }
    }
}

问题:- 连接根本没有建立,catch 块显示 e.getMessage() 为 null .

PS 我也试过 192.168.56.1 ip地址。并在清单文件

中添加使用权限

请在这方面提供任何帮助..!

您需要打印堆栈跟踪而不仅仅是异常消息。这将为您提供更多信息来调试问题...包括异常的名称以及抛出异常的位置。

此外,抓住 Exception 并尝试从中恢复是个坏主意。捕捉 Exception 可以捕捉到各种你意想不到的异常。从您未预料到的异常中恢复是有风险的...因为您不能确保这是一件安全的事情。通常最好让应用程序死掉...

我想给你一些建议:

  1. 在 android 中使用 asynctask 进行网络活动 否则会发生 NetworkOnMainThreadException 因为最好 运行 在 background.Also 中保留所有耗时的活动记住在 asynctask 的 doBackgroung 函数中完成所有任务,然后在 onPostExecute() 和 onProgress() 的帮助下更新和发布结果。
  2. 如果您不使用异步任务,那么只需使用线程并在单独的线程上执行所有网络activity。
  3. 在 java 软件中,使用枚举而不是 InetAddress 来跟踪 IP 地址 因为枚举将显示网络上的所有 IP 地址,您可能会找到问题的答案.(尝试连接到枚举方法显示的所有IP,并自动与合适的IP建立连接)