gpt4 book ai didi

java - 同时打开多个套接字

转载 作者:行者123 更新时间:2023-11-30 11:53:46 25 4
gpt4 key购买 nike

我需要在我的应用程序中同时打开 2 个不同的套接字。一个是标准的 DatagramSocket,另一个是 MulticastSocket。两者都有自己的端口。但是,当我尝试初始化它们时,在创建第二个套接字时出现错误。错误如下:

05-23 10:37:57.011: ERROR/UDPInterface(15478): Exception occurred while initializing MulticastSocket: java.net.BindException: Address already in use

但是,因为我为两个套接字使用不同的端口,所以这不可能发生,对吗?还是因为为 MulticastSocket 指定的端口已被使用?然后错误消息就没有任何意义,因为它正在谈论一个已经在使用的地址....:/

我这样创建套接字:

/**
* Initially set the UnicastSocket to use.
* <p>Called from the constructor to create a new DatagramSocket to use
* for receiving and sending unicast data over UDP.
* @param address The address to initially use.
* @param port The port to initially use.
*/
private void initUnicastSocket(Inet4Address address, int port){
try{
mUnicastSocket = new DatagramSocket(port, address);
mUnicastSocket.setSoTimeout(SOCKET_TIME_OUT);
} catch(SocketException se){
Log.e(TAG, "Exception occurred while initializing UnicastSocket: " + se.toString());
}
if(mUnicastSocket != null){
Log.d(TAG, "Socket initially set to " +
mUnicastSocket.getLocalAddress() + ":" + UnicastSocket.getLocalPort());
}
}

/**
* Initially set the BroadcastSocket to use.
* <p>Called from the constructor to create a new MulticastSocket to use
* for receiving and sending broadcast data over UDP.
* @param address
* @param port
*/
private void initBroadcastSocket(Inet4Address address, int port){
try {
mBroadcastSocket = new MulticastSocket(port);
mBroadcastSocket.joinGroup(address);
mBroadcastSocket.setSoTimeout(SOCKET_TIME_OUT);
} catch (IOException ioe) {
Log.e(TAG, "Exception occurred while initializing MulticastSocket: " + ioe.toString());
}
if(mBroadcastSocket != null){
Log.d(TAG, "MulticastSocket initially set to " + mBroadcastSocket.getLocalAddress() +
":" + mBroadcastSocket.getLocalPort());
}
}

编辑:

值得注意的是,普通的 DatagramSocket 将使用设备的 IP 地址,而 MulticastSocket 将使用用户可配置的 IP 地址。

最佳答案

多播使用 UDP 数据包加上错误消息“正在初始化 MulticastSocket”,所以问题出在多播套接字上。

我建议将套接字参数添加到日志消息中。这将使调试变得更加简单。

您的经历可能有多种原因:

  1. 您的代码的旧副本仍在运行
  2. 设备上有防火墙
  3. 有另一个应用程序使用此端口。尝试不同的检查

关于java - 同时打开多个套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6094868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com