Android的套接字连接失败 [英] Android Socket Connection fail

查看:215
本文介绍了Android的套接字连接失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立是行不通的,即使添加的互联网连接权限

Android客户端和C#服务器..我的服务器工作正常,除了Android客户端之间的连接

下面是code:

 私人无效connectSocket(字符串一){

    尝试 {
        InetAddress类serverAddr = InetAddress.getByName(192.168.0.2);
        Log.d(TCP,C:连接......);

        Socket套接字=新的Socket(serverAddr,4444);
        Log.d(TCP,C:我不知道......);
        //字符串消息=1;

        PrintWriter的输出= NULL;
        BufferedReader中的= NULL;

        尝试 {
          // Log.d(TCP,C:发送:+信息+');
            OUT =的新PrintWriter(新的BufferedWriter(新OutputStreamWriter(socket.getOutputStream())),TRUE);
            在=新的BufferedReader(新的InputStreamReader(socket.getInputStream()));

            //out.println(message);
            而((in.readLine())!= NULL){
            txt.append(in.readLine());
            }

            Log.d(TCP,C:发送。);
            Log.d(TCP,C:完成。);

        }赶上(例外五){
            Log.e(TCP,S:错误,E);
        } 最后 {
            socket.close();
        }

    }赶上(UnknownHostException异常E){
        // TODO自动生成的catch块
        Log.e(TCP,C:UnknownHostException异常,E);
        e.printStackTrace();
    }赶上(IOException异常E){
        // TODO自动生成的catch块
        Log.e(TCP,C:IO​​Exception异常,E);
        e.printStackTrace();
    }
}
 

和这里的调试日志:

  2月十一号至15日:41:58.040:W / dalvikvm(26839):主题ID = 1:螺纹退出与未捕获的异常(组= 0x41c352a0)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):致命异常:主要
2月11号至15日:41:58.075:E / AndroidRuntime(26839):android.os.NetworkOnMainThreadException
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在libcore.io.IoBridge.connectErrno(IoBridge.java:127)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在libcore.io.IoBridge.connect(IoBridge.java:112)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在java.net.Socket.startupSocket(Socket.java:566)
11-15 02:41:58.075:E / AndroidRuntime(26839):在java.net.Socket中的< INIT>(Socket.java:225)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在com.example.socketclient.Socket code.connectSocket(插座code.java:50)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在com.example.socketclient.Socket code.access $ 0(插座code.java:44)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在com.example.socketclient.Socket code $ 1.onClick(插座code.java:35)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.view.View.performClick(View.java:4211)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.view.View $ PerformClick.run(View.java:17267)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.os.Handler.handleCallback(Handler.java:615)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.os.Handler.dispatchMessage(Handler.java:92)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.os.Looper.loop(Looper.java:137)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在android.app.ActivityThread.main(ActivityThread.java:4898)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在java.lang.reflect.Method.invokeNative(本机方法)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在java.lang.reflect.Method.invoke(Method.java:511)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1006)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
2月11号至15日:41:58.075:E / AndroidRuntime(26839):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

通过它您要在主线程上执行联网运行的样子。看看日志跟踪专行 android.os.NetworkOnMainThreadException

Android开发者:网络上的主线程异常

永远做网络上的一个单独的线程比其他主力。有不同的方式来实现这一目标,以及如您可以使用 AsyncTask的或启动线程上你自己的。

有几个职位的SO,这和Android开发者网站。这里有一些链接,让你去:

Android开发者:连接到网络

Android开发者博客:多线程性能

I am trying to establish a connection between Android Client and C# Server .. My server is working fine except the android client is not working even after adding internet connection permission

Here is the code :

    private void connectSocket(String a){ 

    try { 
        InetAddress serverAddr = InetAddress.getByName("192.168.0.2"); 
        Log.d("TCP", "C: Connecting....");

        Socket socket = new Socket(serverAddr,4444); 
        Log.d("TCP", "C: I dunno ...");
        //String message = "1";

        PrintWriter out = null;
        BufferedReader in = null;

        try { 
          //  Log.d("TCP", "C: Sending: '" + message + "'"); 
            out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); 
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));                

            //out.println(message);
            while ((in.readLine()) != null) {
            txt.append(in.readLine());
            }

            Log.d("TCP", "C: Sent."); 
            Log.d("TCP", "C: Done.");               

        } catch(Exception e) { 
            Log.e("TCP", "S: Error", e); 
        } finally { 
            socket.close(); 
        } 

    } catch (UnknownHostException e) { 
        // TODO Auto-generated catch block 
        Log.e("TCP", "C: UnknownHostException", e); 
        e.printStackTrace(); 
    } catch (IOException e) { 
        // TODO Auto-generated catch block 
        Log.e("TCP", "C: IOException", e); 
        e.printStackTrace(); 
    }       
} 

And here is the Debugging Log:

11-15 02:41:58.040: W/dalvikvm(26839): threadid=1: thread exiting with uncaught exception (group=0x41c352a0)
11-15 02:41:58.075: E/AndroidRuntime(26839): FATAL EXCEPTION: main
11-15 02:41:58.075: E/AndroidRuntime(26839): android.os.NetworkOnMainThreadException
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at libcore.io.IoBridge.connect(IoBridge.java:112)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.net.Socket.startupSocket(Socket.java:566)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.net.Socket.<init>(Socket.java:225)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at com.example.socketclient.SocketCode.connectSocket(SocketCode.java:50)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at com.example.socketclient.SocketCode.access$0(SocketCode.java:44)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at com.example.socketclient.SocketCode$1.onClick(SocketCode.java:35)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.view.View.performClick(View.java:4211)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.view.View$PerformClick.run(View.java:17267)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.os.Handler.handleCallback(Handler.java:615)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.os.Looper.loop(Looper.java:137)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at android.app.ActivityThread.main(ActivityThread.java:4898)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.lang.reflect.Method.invokeNative(Native Method)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at java.lang.reflect.Method.invoke(Method.java:511)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-15 02:41:58.075: E/AndroidRuntime(26839):    at dalvik.system.NativeStart.main(Native Method)

解决方案

By the looks of it you are trying to perform networking operation on the main thread. Take a look at the log trace specially line android.os.NetworkOnMainThreadException.

Android Developer: Network on Main Thread Exception

Always do networking on a separate thread other than main. There are different ways to accomplish that as well e.g. you can use AsyncTask or start thread on your own.

There are several posts on SO for this and Android Developer site. Here are a few links to get you going:

Android Developer: Connecting to the network

Android Developers Blog: Multithreading for performance

这篇关于Android的套接字连接失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆