2016-12-30 14 views
-2

私はサーバーから例外を送信してクライアントで受信できるかどうか疑問に思っていました。ここ は私のサーバーです:サーバに例外をスローしてクライアントC++でキャッチするには?

void MyServer::on_new_message(int identifier, string message) { 
    if(/*some condition for message*/) 
     throw BadIO(); 
} 

、ここでは私のクライアントのメインです:

int main(){ 
try{ 
      cin>>c; 
      socket.send(c); 
      socket.receive(); 
     } 
      catch(BadIO& exp) 
     { 
      cout<<exp.what()<<endl; 
     } 
    return 0; 
    } 

このコードをruningて後に私が手:

は 'BadIO' 中断のインスタンスを投げた後に呼び出さ終了します(コアダンプ)

ありがとうございます。

+0

例外はあります。 –

+0

クライアント/サーバはどのように通信していますか?この質問には、必要な詳細の*ロット*がありません。 –

+4

クライアントとサーバーが異なるプロセスにあり、おそらく異なるマシン上にある可能性があります。堅牢なソリューションでは、サーバーがクライアントが読み取ることができる形式に例外をシリアル化して、クライアントが適切な例外をスローします。 – AndyG

答えて

3

可能です。

例外は、プロセス間で渡す他のオブジェクトと同様に、サーバーでシリアル化する必要があります。例外の特別なメッセージがあるので、socket.receiveはそれを検出し、例外を逆シリアル化してクライアントにスローします。

+0

私は中間の文字列を使用しない限り、直接サーバーの送信プロトコルで例外をスローすることはできません。たくさんあります。ありがとうございます:) –

+0

@ Ghazal.S、残念ながらここには魔法はありませんあなたの袖をアップ。 –

関連する問題