Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 尝试连接到TCP服务器时发生套接字异常_Java_Android_Sockets - Fatal编程技术网

Java 尝试连接到TCP服务器时发生套接字异常

Java 尝试连接到TCP服务器时发生套接字异常,java,android,sockets,Java,Android,Sockets,我正在尝试检查是否可以使用以下简单方法建立与TCP服务器的连接: public static boolean serverListening() { Socket s = null; try { s = new Socket("192.168.42.213", 80); return true; } catch (Exception e) { Log.d("SocketException", "Exc

我正在尝试检查是否可以使用以下简单方法建立与TCP服务器的连接:

public static boolean serverListening()
{
    Socket s = null;
    try
    {
        s = new Socket("192.168.42.213", 80);
        return true;
    }
    catch (Exception e)
    {
        Log.d("SocketException", "Exception",e);
        return false;
    }
    finally
    {
        if(s != null)
            try {s.close();}
            catch(Exception e){}
    }
}
我的服务器已经开始工作了,因为我可以在模拟器内用chrome连接到它,所以问题一定出在我的代码上。 如果我尝试运行代码,我会遇到以下异常:

SocketException
android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:621)
    at java.net.Socket.connect(Socket.java:570)
    at java.net.Socket.<init>(Socket.java:450)
    at java.net.Socket.<init>(Socket.java:218)
    at com.example.batterymonitor.MainActivity.serverListening(MainActivity.java:104)
    at com.example.batterymonitor.MainActivity.onCreate(MainActivity.java:58)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
SocketException
android.os.NetworkOnMainThreadException
在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
位于java.net.socksocketimpl.connect(socksocketimpl.java:436)
位于java.net.Socket.connect(Socket.java:621)
位于java.net.Socket.connect(Socket.java:570)
位于java.net.Socket。(Socket.java:450)
位于java.net.Socket(Socket.java:218)
在com.example.batterymonitor.MainActivity.serverListening(MainActivity.java:104)上
位于com.example.batterymonitor.MainActivity.onCreate(MainActivity.java:58)
位于android.app.Activity.performCreate(Activity.java:7136)
位于android.app.Activity.performCreate(Activity.java:7127)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
位于android.os.Handler.dispatchMessage(Handler.java:106)
位于android.os.Looper.loop(Looper.java:193)
位于android.app.ActivityThread.main(ActivityThread.java:6669)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

非常感谢你的帮助

在android中,您不能在主线程上运行与网络相关的操作-您需要在不同的线程上运行它们,例如:

Thread mThread = new Thread(new Runnable() {

@Override
public void run() {
    try  {
        //Put your code that you want to run in here(check your connection for example)
    } catch (Exception e) {
        e.printStackTrace();
    }
  }
});

mThread.start