Android studio最简单的局域网通信

ASstarter 2016-10-22 12:26:15
在MyEclipse中写了几行程序,仅用于往UDP端口发一段文字,程序调试通过,通信也正常。
但把这段程序移植到Android studio中就寸步难行,去掉所有代码,只留了个声明,在手机上依旧闪退,求高人指点迷津。

程序是这样的:OnClick中添加——
new Thread(){
public void run(){
try {
DatagramSocket Dst = new DatagramSocket(9988, InetAddress.getLocalHost());
}
catch (IOException Err){
System.out.println("Error" + Err.getMessage());
}
}
}.start();

俺刚才把程序拷到记事本里面,直接在命令提示符下用JDK编译运行,一切OK。但AS中的程序即使简化到以上程度,依旧闪退。
...全文
969 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arnold9009 2016-10-25
  • 打赏
  • 举报
回复
关键信息:socket failed: EACCES (Permission denied) 在AndroidManifest.xml中加上<uses-permission android:name="android.permission.INTERNET"/> 应该就可以了
秃头地中海 2016-10-25
  • 打赏
  • 举报
回复
没加权限 <uses-permission android:name="android.permission.INTERNET"/> 6.0之后要动态获取权限
幻影宇寰 2016-10-25
  • 打赏
  • 举报
回复
引用 4 楼 ASstarter 的回复:
[quote=引用 2 楼 u013545836 的回复:] 闪退日志呢?
请问啥子叫“闪退日志”,如何能够看到? 楼上兄台,程序似乎无法执行到“sendData”那一句,调试时输出一下信息: W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied) W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:665) W/System.err: at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93) W/System.err: at java.net.DatagramSocket.createSocket(DatagramSocket.java:157) W/System.err: at java.net.DatagramSocket.<init>(DatagramSocket.java:80) W/System.err: at dr.threadnet.MainActivity.receiveData(MainActivity.java:82) W/System.err: at dr.threadnet.MainActivity$2.run(MainActivity.java:60) W/System.err: at java.lang.Thread.run(Thread.java:818) W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied) W/System.err: at libcore.io.Posix.socket(Native Method) W/System.err: at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282) W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:650) W/System.err: ... 6 more 超郁闷哪,这个玩意儿有那么大难度吗? 牢骚:CSDN回帖时那个校验码也太难辨认了,每次都得错几次才行——能不能改得清晰一点?编程的大多近视,是这样吧?[/quote] 错误提示权限没加呀,在AndroidManifest.xml中添加如下权限配置试试:

<!--允许应用程序改变网络状态-->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <!--允许应用程序改变WIFI连接状态-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!--允许应用程序访问有关的网络信息-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!--允许应用程序访问WIFI网卡的网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!--允许应用程序完全使用网络-->
    <uses-permission android:name="android.permission.INTERNET"/>
小白在此 2016-10-24
  • 打赏
  • 举报
回复
你android的网络权限申请了吗?
小白在此 2016-10-22
  • 打赏
  • 举报
回复
闪退日志呢?
ASstarter 2016-10-22
  • 打赏
  • 举报
回复
好像Socket程序需要配置应用的网络权限什么的,俺没有这方面的知识,也就把网络操作当成普通程序来对待的(需try/catch,得开辅助线程跑什么的知道了)。 需要对网络代码进行什么别的动作吗?
ASstarter 2016-10-22
  • 打赏
  • 举报
回复
引用 2 楼 u013545836 的回复:
闪退日志呢?
请问啥子叫“闪退日志”,如何能够看到? 楼上兄台,程序似乎无法执行到“sendData”那一句,调试时输出一下信息: W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied) W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:665) W/System.err: at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:93) W/System.err: at java.net.DatagramSocket.createSocket(DatagramSocket.java:157) W/System.err: at java.net.DatagramSocket.<init>(DatagramSocket.java:80) W/System.err: at dr.threadnet.MainActivity.receiveData(MainActivity.java:82) W/System.err: at dr.threadnet.MainActivity$2.run(MainActivity.java:60) W/System.err: at java.lang.Thread.run(Thread.java:818) W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied) W/System.err: at libcore.io.Posix.socket(Native Method) W/System.err: at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282) W/System.err: at libcore.io.IoBridge.socket(IoBridge.java:650) W/System.err: ... 6 more 超郁闷哪,这个玩意儿有那么大难度吗? 牢骚:CSDN回帖时那个校验码也太难辨认了,每次都得错几次才行——能不能改得清晰一点?编程的大多近视,是这样吧?
ASstarter 2016-10-22
  • 打赏
  • 举报
回复
都还没起床咋的? 忘了说一下,俺的平台:Win7(32)旗舰版+Android studio 2.2.2,手机上是Android 5.1
幻影宇寰 2016-10-22
  • 打赏
  • 举报
回复
给你一个参考代码试试:

public static void sendData(byte[] data) throws IOException {
        if(data == null){
            return;
        }
        DatagramSocket datagramSocket = new DatagramSocket();
        DatagramPacket datagramPacket = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.122"), 9999);
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }

    public static void receiveData() throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        byte[] receive = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(receive, receive.length);
        datagramSocket.receive(datagramPacket);
        Log.i("XYY", new String(receive, 0, datagramPacket.getLength()));
        datagramSocket.close();
    }
调用如下:

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
        	UDP.receiveData();
            UDP.sendData("逍遥游".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧