套接字连接错误 '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
可以捕捉到各种你意想不到的异常。从您未预料到的异常中恢复是有风险的...因为您不能确保这是一件安全的事情。通常最好让应用程序死掉...
我想给你一些建议:
- 在 android 中使用 asynctask 进行网络活动 否则会发生 NetworkOnMainThreadException 因为最好 运行 在 background.Also 中保留所有耗时的活动记住在 asynctask 的 doBackgroung 函数中完成所有任务,然后在 onPostExecute() 和 onProgress() 的帮助下更新和发布结果。
- 如果您不使用异步任务,那么只需使用线程并在单独的线程上执行所有网络activity。
- 在 java 软件中,使用枚举而不是 InetAddress 来跟踪 IP 地址 因为枚举将显示网络上的所有 IP 地址,您可能会找到问题的答案.(尝试连接到枚举方法显示的所有IP,并自动与合适的IP建立连接)
我想做什么:
我正在尝试构建一个测试应用程序,现在,只需在 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
可以捕捉到各种你意想不到的异常。从您未预料到的异常中恢复是有风险的...因为您不能确保这是一件安全的事情。通常最好让应用程序死掉...
我想给你一些建议:
- 在 android 中使用 asynctask 进行网络活动 否则会发生 NetworkOnMainThreadException 因为最好 运行 在 background.Also 中保留所有耗时的活动记住在 asynctask 的 doBackgroung 函数中完成所有任务,然后在 onPostExecute() 和 onProgress() 的帮助下更新和发布结果。
- 如果您不使用异步任务,那么只需使用线程并在单独的线程上执行所有网络activity。
- 在 java 软件中,使用枚举而不是 InetAddress 来跟踪 IP 地址 因为枚举将显示网络上的所有 IP 地址,您可能会找到问题的答案.(尝试连接到枚举方法显示的所有IP,并自动与合适的IP建立连接)