如何在Android中建立UDP连接 [英] How to make a UDP connection in android

查看:98
本文介绍了如何在Android中建立UDP连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在银河标签笔记本电脑之间建立连接.因此,我试图在笔记本电脑上运行服务器活动,并在选项卡上运行客户端活动,但这不起作用.这是服务器和客户端代码.错误在哪里?

I'm trying to make a connection between my galaxy tab and my laptop. So I'm trying to run server activity on my laptop and client activity on my tab, but it doesn't work. Here is the server and client code. Where is the mistake?

服务器:

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView txt = (TextView)findViewById(R.id.textView1);

    int port = 12345;
    byte [] message = new byte [1500];
    DatagramPacket p = new DatagramPacket (message,message.length);
    try {
        InetAddress serveraddr = InetAddress.getByName("192.168.1.116");
        DatagramSocket s = new DatagramSocket (port,serveraddr);
        while (true){
            s.receive(p);
            String text = new String (message,0,p.getLength());
            txt.setText(text);
        }
    } catch (SocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

客户:

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final EditText edt = (EditText)findViewById(R.id.editText1);
    Button btn = (Button)findViewById(R.id.button1);
    btn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            String msg = edt.getText().toString();
            int port = 12345;
            try {
                DatagramSocket s = new DatagramSocket();
                InetAddress local  = InetAddress.getByName("192.168.1.116");
                int msg_lenght = msg.length();
                byte []message = msg.getBytes();
                DatagramPacket p = new DatagramPacket(message,msg_lenght,local,port);
                s.send(p);
            } catch (SocketException e) {                   
                e.printStackTrace();
            } catch (UnknownHostException e) {                  
                e.printStackTrace();
            } catch (IOException e) {               
                e.printStackTrace();
            }               
        }
    });
}

这是日志:

09-17 23:49:55.190:D/dalvikvm(5892):后启用CheckJNI 09-1723:49:55.690:D/CLIPBOARD(5892):在开始时隐藏剪贴板对话框输入:由其他人完成...!09-17 23:49:59.590:D/AndroidRuntime(5892):关闭VM 09-17 23:49:59.590:W/dalvikvm(5892):threadid = 1:线程退出且未捕获到异常(group = 0x40c4f1f8)09-17 23:49:59.590:E/AndroidRuntime(5892):FATAL例外:main 09-17 23:49:59.590:E/AndroidRuntime(5892):android.os.NetworkOnMainThreadException 09-17 23:49:59.590:E/AndroidRuntime(5892):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)09-17 23:49:59.590:E/AndroidRuntime(5892):atlibcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)09-1723:49:59.590:E/AndroidRuntime(5892):位于libcore.io.IoBridge.sendto(IoBridge.java:463)09-17 23:49:59.590:E/AndroidRuntime(5892):在java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182)09-17 23:49:59.590:E/AndroidRuntime(5892):atjava.net.DatagramSocket.send(DatagramSocket.java:307)09-1723:49:59.590:E/AndroidRuntime(5892):位于com.example.udpclient.MainActivity $ 1.onClick(MainActivity.java:36)09-17 23:49:59.590:E/AndroidRuntime(5892):atandroid.view.View.performClick(View.java:3620)09-17 23:49:59.590:E/AndroidRuntime(5892):在android.view.View $ PerformClick.run(View.java:14322)09-1723:49:59.590:E/AndroidRuntime(5892):位于android.os.Handler.handleCallback(Handler.java:605)09-1723:49:59.590:E/AndroidRuntime(5892):位于android.os.Handler.dispatchMessage(Handler.java:92)09-1723:49:59.590:E/AndroidRuntime(5892):位于android.os.Looper.loop(Looper.java:137)09-17 23:49:59.590:E/AndroidRuntime(5892):在android.app.ActivityThread.main(ActivityThread.java:4507)09-1723:49:59.590:E/AndroidRuntime(5892):位于java.lang.reflect.Method.invokeNative(本机方法)09-1723:49:59.590:E/AndroidRuntime(5892):位于java.lang.reflect.Method.invoke(Method.java:511)09-17 23:49:59.590:E/AndroidRuntime(5892):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:978)09-17 23:49:59.590:E/AndroidRuntime(5892):atcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)09-1723:49:59.590:E/AndroidRuntime(5892):位于dalvik.system.NativeStart.main(本机方法)09-17 23:50:34.320:I/Process(5892):正在发送信号.PID:5892 SIG:9

09-17 23:49:55.190: D/dalvikvm(5892): Late-enabling CheckJNI 09-17 23:49:55.690: D/CLIPBOARD(5892): Hide Clipboard dialog at Starting input: finished by someone else... ! 09-17 23:49:59.590: D/AndroidRuntime(5892): Shutting down VM 09-17 23:49:59.590: W/dalvikvm(5892): threadid=1: thread exiting with uncaught exception (group=0x40c4f1f8) 09-17 23:49:59.590: E/AndroidRuntime(5892): FATAL EXCEPTION: main 09-17 23:49:59.590: E/AndroidRuntime(5892): android.os.NetworkOnMainThreadException 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 09-17 23:49:59.590: E/AndroidRuntime(5892): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175) 09-17 23:49:59.590: E/AndroidRuntime(5892): at libcore.io.IoBridge.sendto(IoBridge.java:463) 09-17 23:49:59.590: E/AndroidRuntime(5892): at java.net.PlainDatagramSocketImpl.send(PlainDatagramSocketImpl.java:182) 09-17 23:49:59.590: E/AndroidRuntime(5892): at java.net.DatagramSocket.send(DatagramSocket.java:307) 09-17 23:49:59.590: E/AndroidRuntime(5892): at com.example.udpclient.MainActivity$1.onClick(MainActivity.java:36) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.view.View.performClick(View.java:3620) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.view.View$PerformClick.run(View.java:14322) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.os.Handler.handleCallback(Handler.java:605) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.os.Handler.dispatchMessage(Handler.java:92) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.os.Looper.loop(Looper.java:137) 09-17 23:49:59.590: E/AndroidRuntime(5892): at android.app.ActivityThread.main(ActivityThread.java:4507) 09-17 23:49:59.590: E/AndroidRuntime(5892): at java.lang.reflect.Method.invokeNative(Native Method) 09-17 23:49:59.590: E/AndroidRuntime(5892): at java.lang.reflect.Method.invoke(Method.java:511) 09-17 23:49:59.590: E/AndroidRuntime(5892): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978) 09-17 23:49:59.590: E/AndroidRuntime(5892): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 09-17 23:49:59.590: E/AndroidRuntime(5892): at dalvik.system.NativeStart.main(Native Method) 09-17 23:50:34.320: I/Process(5892): Sending signal. PID: 5892 SIG: 9

推荐答案

09-17 23:49:59.590: E/AndroidRuntime(5892): android.os.NetworkOnMainThreadException
09-17 23:49:59.590: E/AndroidRuntime(5892):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
09-17 23:49:59.590: E/AndroidRuntime(5892):     at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:175)

您不应在ui线程中进行网络或时间密集型操作

You shouldn't do network or time intensiv operations in ui thread

另请参阅: Android:某些应用程序用户的NoClassDefFoundError Android开发者信息

结帐: activity.runOnUi

这篇关于如何在Android中建立UDP连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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