1

アプリケーションの実行に問題があります。私はサーバーを持っています:

#include "Hello_impl.h"
#include <iostream>
#include <omniORB4/CORBA.h>
#include <omniORB4/Naming.hh>

using namespace std;

int main(int argc, char ** argv)
{
try {
// init ORB
CORBA::ORB_ptr orb = CORBA::ORB_init(argc, argv);

// init POA
CORBA::Object_var poa_obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var poa = PortableServer::POA::_narrow(poa_obj);
PortableServer::POAManager_var manager = poa->the_POAManager();

// create service
Hello_impl * service = new Hello_impl;

// register within the naming service
try {
CORBA::Object_var ns_obj = orb->resolve_initial_references("NameService");
if (!CORBA::is_nil(ns_obj)) {
CosNaming::NamingContext_ptr nc = CosNaming::NamingContext::_narrow(ns_obj);
CosNaming::Name name;
name.length(1);
name[0].id = CORBA::string_dup("TestServer");
name[0].kind = CORBA::string_dup("");
nc->rebind(name, service->_this());
cout << "Server is running ..." << endl;
}
} catch (CosNaming::NamingContext::NotFound &) {
cerr << "not found" << endl;
} catch (CosNaming::NamingContext::InvalidName &) {
cerr << "invalid name" << endl;
} catch (CosNaming::NamingContext::CannotProceed &) {
cerr << "cannot proceed" << endl;
}

// run
manager->activate();
orb->run();

// clean up
delete service;

// quit
orb->destroy();
} catch (CORBA::UNKNOWN) {
cerr << "unknown exception" << endl;
} catch (CORBA::SystemException &) {
cerr << "system exception" << endl;
}
}

およびクライアント:

import java.util.*;

public class client {
public static void main(String [] args) {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
if (orb == null) System.exit(-1);
try {
// obtain service from naming server
org.omg.CORBA.Object ns_obj = orb.resolve_initial_references("NameService");
org.omg.CosNaming.NamingContext nc
= org.omg.CosNaming.NamingContextHelper.narrow(ns_obj);
org.omg.CosNaming.NameComponent [] path
= { new org.omg.CosNaming.NameComponent("TestServer", "") };
org.omg.CORBA.Object obj = nc.resolve(path);
Hello hello = HelloHelper.narrow(obj);

// use service
String server = hello.say_hello("Hello, omniORB C++ server, it's Java client");
System.out.println("Answer from server: " + server);

// destroy
orb.destroy();
} catch (org.omg.CORBA.ORBPackage.InvalidName exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.NotFound exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.CannotProceed exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName exception) {
exception.printStackTrace(System.out);
} catch (org.omg.CORBA.COMM_FAILURE exception) {
exception.printStackTrace(System.out);
} catch (Exception exception) {
exception.printStackTrace(System.out);
}
}
}

次のように omniNames を開始します。

omniNames -start 6666 -logdir /home/mazix/Desktop/example/logs -errlog /home/mazix/Desktop/example/logs/omniNamesError.txt

次に、次のようにサーバーを起動します。

./server -ORBInitRef NameService=IOR: .... (and here is my IOR num)

そして、クライアントを(同じコンピューター上で)起動します:次のように:

java client -ORBInitRef NameService=corbaloc::localhost:6666/NameService

そして、それは機能していますが、次のようにサーバーを起動したい(する必要があります):

./server NameService=corbaname::localhost:6666

とクリネ:

java client -ORBInitialHost localhost -ORBInitialPort 6666 

しかし、そのように開始すると機能しません:/

何か助けはありますか?:(

ここに私の omniORB 構成ファイルがあります: http://www.2shared.com/document/dBAhFGLh/omniORB4cfg.html

それに加えて、サーバーが私のコンピューターにあり、クライアントが私の学校のコンピューターにある場合、問題が発生します。彼らはお互いを「見ていない」:(


わかりました: omniNamesを開始していませんが、omniNames を開始する前に何かがポート 2809 でリッスンしていました。

私はそれで大丈夫だと思ったので、端末に「omniNames」と入力してomniNamesを実行する必要はなく、実行しませんでした

あなたが言ったようにサーバーを実行しようとしただけです:http://i46.tinypic.com/2q2e33c.png


私はこれを試しました:

  1. omn​​iNames を実行しました: omniNames -start 6666
  2. サーバーを実行しました: ./server -ORBInitRef NameService=corbaloc::localhost:6666/NameService -ORBtraceLevel 40

そしてこれを得ました:

mazix@computer:~/Desktop/example/cpp$ ./server -ORBInitRef NameService=corbaloc::localhost:6666/NameServie -ORBtraceLevel 40
omniORB: Read from configuration file "/etc/omniORB.cfg".
omniORB: Version: 4.1.2
omniORB: Distribution date: Thu Feb 14 14:19:08 GMT 2008 dgrisby
omniORB: My addresses are: 
omniORB: 127.0.0.1
omniORB: 10.0.2.15
omniORB: ::1
omniORB: Maximum supported GIOP version is 1.2
omniORB: Native char code sets: ISO-8859-1 UTF-8.
omniORB: Transmission char code sets: ISO-8859-1(1.2) ISO-8859-1(1.1) ISO-8859-1(1.0) UTF-8(1.2) UTF-8(1.1).
omniORB: Native wide char code sets: UTF-16.
omniORB: Transmission wide char code sets: UTF-16(1.2).
omniORB: Information: the omniDynamic library is not linked.
omniORB: Creating ref to remote: key<INIT>
 target id      : omg.org/CORBA/InitialReferences:1.0
 most derived id: omg.org/CORBA/InitialReferences:1.0
omniORB: Current configuration is as follows:
omniORB:   DefaultInitRef (file) = corbaloc::localhost:6666/NameService
omniORB:   DefaultInitRef (args) = 
omniORB:   InitRef = NameService=corbaloc::localhost:6666/NameServie
omniORB:   abortOnInternalError = 0
omniORB:   abortOnNativeException = 0
omniORB:   acceptBiDirectionalGIOP = 0
omniORB:   acceptMisalignedTcIndirections = 0
omniORB:   bootstrapAgentHostname = localhost
omniORB:   bootstrapAgentPort = 900
omniORB:   clientCallTimeOutPeriod = 0
omniORB:   clientConnectTimeOutPeriod = 0
omniORB:   clientTransportRule = * unix,ssl,tcp
omniORB:   configFile = /etc/omniORB.cfg
omniORB:   connectionWatchImmediate = 0
omniORB:   connectionWatchPeriod = 50000
omniORB:   copyValuesInLocalCalls = 1
omniORB:   diiThrowsSysExceptions = 0
omniORB:   dumpConfiguration = 0
omniORB:   endPoint = giop:tcp::
omniORB:   endPointPublish = addr
omniORB:   giopMaxMsgSize = 2097152
omniORB:   giopTargetAddressMode = KeyAddr
omniORB:   id = omniORB4
omniORB:   idleThreadTimeout = 10
omniORB:   immediateAddressSwitch = 0
omniORB:   inConScanPeriod = 180
omniORB:   lcdMode = 0
omniORB:   maxGIOPConnectionPerServer = 5
omniORB:   maxGIOPVersion = 1.2
omniORB:   maxInterleavedCallsPerConnection = 5
omniORB:   maxServerThreadPerConnection = 100
omniORB:   maxServerThreadPoolSize = 100
omniORB:   maxSocketRecv = 2147483647
omniORB:   maxSocketSend = 2147483647
omniORB:   nativeCharCodeSet = ISO-8859-1
omniORB:   nativeWCharCodeSet = UTF-16
omniORB:   objectTableSize = 0
omniORB:   offerBiDirectionalGIOP = 0
omniORB:   oneCallPerConnection = 1
omniORB:   outConScanPeriod = 120
omniORB:   poaHoldRequestTimeout = 0
omniORB:   poaUniquePersistentSystemIds = 1
omniORB:   principal = [Null]
omniORB:   resetTimeOutOnRetries = 0
omniORB:   scanGranularity = 5
omniORB:   serverCallTimeOutPeriod = 0
omniORB:   serverTransportRule = * unix,ssl,tcp
omniORB:   socketSendBuffer = -1
omniORB:   strictIIOP = 1
omniORB:   supportBootstrapAgent = 1
omniORB:   supportCurrent = 1
omniORB:   supportPerThreadTimeOut = 0
omniORB:   tcAliasExpand = 0
omniORB:   threadPerConnectionLowerLimit = 9000
omniORB:   threadPerConnectionPolicy = 1
omniORB:   threadPerConnectionUpperLimit = 10000
omniORB:   threadPoolWatchConnection = 1
omniORB:   traceExceptions = 1
omniORB:   traceFile = [stderr]
omniORB:   traceInvocationReturns = 0
omniORB:   traceInvocations = 0
omniORB:   traceLevel = 40
omniORB:   traceThreadId = 0
omniORB:   traceTime = 0
omniORB:   unixTransportDirectory = /tmp/omni-%u
omniORB:   unixTransportPermission =  777
omniORB:   useTypeCodeIndirections = 1
omniORB:   verifyObjectExistsAndType = 1
omniORB: Initialising incoming endpoints.
omniORB: Instantiate endpoint 'giop:tcp::0'
omniORB: Bind to address 0.0.0.0
omniORB: Publish specification: 'addr'
omniORB: Try to publish 'addr' for endpoint giop:tcp:10.0.2.15:44025
omniORB: Publish endpoint 'giop:tcp:10.0.2.15:44025'
omniORB: Starting serving incoming endpoints.
omniORB: Creating ref to remote: key<NameServie>
 target id      : IDL:omg.org/CORBA/Object:1.0
 most derived id: 
omniORB: Initial reference `NameService' resolved from -ORBInitRef argument / ORB registration.
omniORB: Client attempt to connect to giop:tcp:localhost:6666
omniORB: Switch rope to use address giop:tcp:localhost:6666
omniORB: Unable to open new connection: giop:tcp:localhost:6666
omniORB: throw giopStream::CommFailure from giopStream.cc:1148(0,NO,TRANSIENT_ConnectFailed)
omniORB: throw TRANSIENT from omniObjRef.cc:789 (NO,TRANSIENT_ConnectFailed)
system exceptionTRANSIENT_ConnectFailed
omniORB: omniRemoteIdentity deleted.
omniORB: ObjRef() -- deleted.
omniORB: ORB not destroyed; no final clean-up.
4

2 に答える 2

1
  1. ローカルヒストとは?ローカルホストのことですか?

  2. 私が思い出す限り、CORBA クライアントは常に IOR または corbaloc 文字列のいずれかを提供する必要があります。おそらくこれをローカルで構成できますが、それはクライアント固有になる可能性があります。サーバーのバインディングは構成可能である必要があります。

  3. 自宅のコンピューターと学校のコンピューターの間の問題は、ファイアウォールに関連している可能性があります。あなたの学校の IT 部門が未知のインバウンド トラフィックをファイアウォールで保護していなかったとしたら、私は非常に驚かれることでしょう。ネットワーク上のランダムなマシンへの接続は、このカテゴリに分類されます。

于 2012-05-01T12:31:08.757 に答える
1
java client -ORBInitialHost localhost -ORBInitialPort 6666 

は、ローカル ネーム サービスを検索するための ORACLE/SUN の特別な手法です。より柔軟で移植性の高い方法は、クライアントとサーバーの両方に corbaloc アドレスを使用することです。これはあなたの場合です:

java client -ORBInitRef NameService=corbaloc::localhost:6666/NameService
#and 
./server -ORBInitRef NameService=corbaloc::localhost:6666/NameService

クライアントとサーバーの両方で、コマンドライン引数を解析して、次のような「より適切な」インターフェイスにすることもできます。

java client localhost:6666
# and
./server localhost:6666

この場合resolve_initial_references("NameService")、通常のオブジェクトのナローイングを使用して呼び出しを交換するか、実行時に ORB 構成/パラメーターにパッチを適用する必要があります。(サンプルはご要望に応じて提供できます)

クライアント/サーバーが同じマシンで実行されていない場合はlocalhost、NamingService とサーバーの両方について、サーバーの IP または公開名と交換する必要があります。

于 2012-05-02T13:55:30.530 に答える