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打印整个堆栈跟踪。