Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误';空';在套接字连接中,Android_Java_Android_Sockets_Tcp Ip - Fatal编程技术网

Java 错误';空';在套接字连接中,Android

Java 错误';空';在套接字连接中,Android,java,android,sockets,tcp-ip,Java,Android,Sockets,Tcp Ip,我想做什么: 目前,我正在尝试构建一个测试应用程序,只需通过套接字连接在Android手机(4.2.2)(作为客户端)上的应用程序和在pc(windows 8)(作为服务器)上运行的java应用程序之间建立连接 我已经做了什么: 我在pc上用java为客户机和服务器制作了程序,并对它们进行了积极的测试(建立了连接) 网络: 我的手机和电脑都连接到我家的wifi。电脑上的ipconfig显示地址192.168.56.1,登录路由器时显示我的电脑地址192.168.0.108(可能我不懂联网:P)

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

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

网络:
我的手机和电脑都连接到我家的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.1ip地址。并在清单文件中添加了使用权限的


在这方面有什么帮助吗

您需要打印stacktrace,而不仅仅是异常消息。这将为您调试问题提供更多信息。。。包括异常的名称以及引发异常的位置


此外,捕获
异常并尝试从中恢复是个坏主意。捕获
Exception
可以捕获您从未预料到的各种异常。从您不期望的异常中恢复是有风险的。。。因为你不能确定这样做是否安全。通常最好让应用程序死掉…

我想给你一些建议:

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

  • 我在主线程上使用网络。事实证明,android通常不允许这样做:)谢谢你关于查看堆栈跟踪的建议,有很多这样的<例如,code>EOFEException
    和大量的
    RuntimeException
    。至少打印异常类名和消息,例如使用
    exception.toString()。
    更好的是,p打印整个堆栈跟踪。