【发布时间】:2018-03-25 09:33:35
【问题描述】:
我必须在 Android 中发送 UDP 广播。我总是在 socket.send(packet) 收到 java.io.IOException: Invalid argument。 创建套接字对象时,我有时会得到 Address already in use 异常
我的代码完整代码是(编辑 2):
private void setBroadCastMessage() {
final int udpPortNumber = 6000;
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getActiveNetworkInfo();
if (mWifi.getType() == ConnectivityManager.TYPE_WIFI) {
if (mWifi.isConnected()) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
try {
InetAddress address;
address=InetAddress.getByName("255.255.255.255");
DatagramSocket datagramSocket = new DatagramSocket(udpPortNumber,address);
messageBroadCast(datagramSocket,address);
} catch (SocketException e) {
e.printStackTrace();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
thread.start();
}
}
}
public void messageBroadCast(DatagramSocket socket, InetAddress address)
{
String data="This is my discovery request";
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
address, 6000);
try {
socket.send(packet);
LogUtils.errorLog("Address :"," "+address);
LogUtils.errorLog("Send String:"," "+data);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
【问题讨论】:
-
您的代码看起来不错。也许发布堆栈跟踪
-
这段代码甚至无法编译。
-
我不认为这是一个完整的示例,因为
socket没有定义,但假设套接字已设置,它肯定可以编译。 -
@Kuffs 如果没有
socket的定义,它不能'肯定编译',但是无论如何都会有一个错误'address可能没有被初始化'。跨度> -
对,它的编译并在运行时给出异常。作为参考,我还为代码编写代码:DatagramSocket socket = null;尝试 { socket = new DatagramSocket(6000,address); } catch (SocketException e) { e.printStackTrace(); }
标签: java android sockets udp broadcast