Android的DatagramSocket的错误消息:EADDRINUSE(地址已在使用)

编程入门 行业动态 更新时间:2024-10-28 10:27:22
本文介绍了Android的DatagramSocket的错误消息:EADDRINUSE(地址已在使用)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想编写一个简单的机器人聊天应用程序。我创建了负责处理所有的网络通信服务类。 DatagramSocket的结合是在一个单独的线程。一旦当我得到这个错误和应用程序崩溃:

java.BindException:绑定失败:EADDRINUSE(地址已在使用) 在libcore.io.IoBridge.bind(IoBridge.java:89) 在java.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68) 在java.DatagramSocket.createSocket(DatagramSocket.java:133) 在java.DatagramSocket中的< INIT>(DatagramSocket.java:78)

这是code这prodruces它。在与该行发生错误的新的DatagramSocket 我怎样才能避免这个错误?谢谢你。

私有类ComThread继承Thread {         私有静态最终诠释BCAST_PORT = 8779;         DatagramSocket的mSocket;         InetAddress类myBcastIP,myLocalIP;         公共ComThread(){             尝试 {                 myBcastIP = getBroadcastAddress();                 如果(D)的                     Log.d(TAG,我的BCAST IP:+ myBcastIP);                 myLocalIP = getLocalAddress();                 如果(D)的                     Log.d(TAG,我的本地IP:+ myLocalIP);                 如果(mSocket == NULL){                     mSocket =新的DatagramSocket(BCAST_PORT);                     mSocket.setReuseAddress(真正的);                     mSocket.setBroadcast(真正的);                 }             }赶上(IOException异常E){                 Log.e(TAG,无法建立套接字,E);             }         }

解决方案

您需要设置 SO_REUSEADDR 才具有约束力。不要指定在构造函数中港 - 创建未绑定的套接字,而不是用DatagramSocket(null),然后设置选项,然后bind()明确。

I am trying to write a simple android chat app. I have created a service class which handles all the networking communication. The DatagramSocket binding is in a separate thread. Once in while I am getting this error and the app crashes:

java.BindException: bind failed: EADDRINUSE (Address already in use) at libcore.io.IoBridge.bind(IoBridge.java:89) at java.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68) at java.DatagramSocket.createSocket(DatagramSocket.java:133) at java.DatagramSocket.<init>(DatagramSocket.java:78)

and this is the code which prodruces it. The error occur on the line with new DatagramSocket How can I avoid this error? Thank you.

private class ComThread extends Thread { private static final int BCAST_PORT = 8779; DatagramSocket mSocket; InetAddress myBcastIP, myLocalIP; public ComThread() { try { myBcastIP = getBroadcastAddress(); if (D) Log.d(TAG, "my bcast ip : " + myBcastIP); myLocalIP = getLocalAddress(); if (D) Log.d(TAG, "my local ip : " + myLocalIP); if (mSocket == null) { mSocket = new DatagramSocket(BCAST_PORT); mSocket.setReuseAddress(true); mSocket.setBroadcast(true); } } catch (IOException e) { Log.e(TAG, "Could not make socket", e); } }

解决方案

You need to set SO_REUSEADDR before binding. Don't specify port in the constructor - create unbound socket instead with DatagramSocket(null), then set options, then bind() explicitly.

更多推荐

Android的DatagramSocket的错误消息:EADDRINUSE(地址已在使用)

本文发布于:2023-08-07 14:03:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1319465.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:已在   错误   消息   地址   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!