Android DatagramSocket error message: EADDRINUSE (Address already in use)
java.net.BindException: bind failed: EADDRINUSE (Address already in use)
at libcore.io.IoBridge.bind(IoBridge.java:89)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68)
at java.net.DatagramSocket.createSocket(DatagramSocket.java:133)
at java.net.DatagramSocket.<init>(DatagramSocket.java:78)
在做 UDP socket 通信时出现了上面的错误 Log, 经过分析代码 查出原因是 我在不停的创建新的 DatagramSocket 这就导致了地址冲突。
解决方法如下:
try {
byte[] data = new byte[width * height * 5];
DatagramPacket packet = new DatagramPacket(data, data.length);
if(mReadSocket==null) {
mReadSocket = new DatagramSocket(null);
mReadSocket.setReuseAddress(true);
mReadSocket.bind(new InetSocketAddress(port));
}
while (!decodeVideoThread.isInterrupted() && !mReadSocket.isClosed()) {
mReadSocket.receive(packet);
}
} catch (Exception e) {
e.printStackTrace();
}