Java/CORBA教程运行Server遇COMM_FAILURE错误求助
CORBA服务启动连接拒绝问题修复方案
问题核心
启动Server.java时触发COMM_FAILURE,根源是代码尝试连接默认端口900的命名服务,但你实际启动的ORBD/tnameserv在1050/1051端口,且启动命令参数格式错误导致服务找不到正确的命名服务地址。
修复步骤
1. 修正Server启动命令的参数格式
你当前的启动命令参数格式错误,CORBA的ORB参数必须以-开头,正确命令如下:
- 若使用ORBD(1050端口):
java Server -ORBInitialPort 1050 -ORBInitialHost localhost - 若使用tnameserv(1051端口):
java Server -ORBInitialPort 1051 -ORBInitialHost localhost
注意:命令中
-ORBInitialPort和-ORBInitialHost必须作为参数前缀,不能省略-。
2. 匹配命名服务类型与代码调用
你的代码中调用的是NameService:
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
- tnameserv默认提供的就是
NameService,对应1051端口 - ORBD也包含
NameService,需确保ORBD启动时未修改默认配置
3. 验证端口监听状态
确认ORBD/tnameserv确实在指定端口监听:
- Windows系统执行:
netstat -ano | findstr :1050 - Linux/macOS系统执行:
lsof -i :1050
如果没有返回结果,说明服务未正常启动,需重新启动ORBD/tnameserv。
4. 代码内显式指定ORB参数(可选)
若不想每次启动都加命令行参数,可在初始化ORB时直接指定参数:
import org.omg.CORBA.ORB; public class Server { public static void main(String[] args) { // 显式指定ORB参数 String[] orbArgs = {"-ORBInitialPort", "1050", "-ORBInitialHost", "localhost"}; ORB orb = ORB.init(orbArgs, null); // 后续代码... org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); } }
内容的提问来源于stack exchange,提问作者user3067847
相关产品推荐
相关产品推荐

