小编Zur*_*r13的帖子

启用 java 安全管理器限制 udp 套接字数量

我有一个带有自定义安全策略的 java 应用程序,当我尝试打开 100 个 udp 套接字时,出现异常:

java.net.SocketException: maximum number of DatagramSockets reached
Run Code Online (Sandbox Code Playgroud)

测试应用程序:

import java.net.DatagramSocket;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.List;   

public class Test {
    static int basePortNum = 40000; 
    public static void main(String[] args) {
        List<DatagramSocket> socks = new ArrayList<DatagramSocket>();
        try{
            for(int i = 0; i<100; i++){
                socks.add(new DatagramSocket(basePortNum+i, Inet4Address.getByName("127.0.0.1")) );
                System.out.println(i);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            for(java.net.DatagramSocket soc: socks){
                soc.close();
            }
        }    
    }    
}
Run Code Online (Sandbox Code Playgroud)

如果我在没有安全管理器的情况下启动它,它会创建所有 100 个套接字:

0
1
...
98
99
Run Code Online (Sandbox Code Playgroud)

但是如果我将这一行添加到 VM 参数中

-Djava.security.manager
Run Code Online (Sandbox Code Playgroud)

即使使用默认的安全策略它也会失败: …

java sockets policy securitymanager

3
推荐指数
1
解决办法
3985
查看次数

标签 统计

java ×1

policy ×1

securitymanager ×1

sockets ×1