2016-12-30 52 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; 
    } 

乳寧這個代碼後,我得到:

拋出的 'BadIO' 中止一個實例後終止叫(核心轉儲)

預先感謝:)

+0

這是你的例外。 –

+0

客戶機/服務器如何通信?這個問題缺少很多必要的細節。 –

+4

您的客戶端和服務器位於不同的進程中,並且可能位於不同的計算機上。一個強大的解決方案可以讓服務器將異常序列化爲客戶端可以讀取的格式,然後客戶端會拋出相應的異常。 – AndyG

回答

3

這是可能的。

需要在服務器中序列化異常,就像在進程之間傳遞的任何其他對象一樣。爲異常提供特殊消息,以便socket.receive可以檢測到它,反序列化異常並將其發送到客戶端。

+0

明白了。所以我意識到我不能直接發送拋出異常的服務器的發送協議,除非我在中間使用中間字符串。謝謝很多:) –

+0

@ Ghazal.S對,這裏沒有魔法,不幸的是,roll你的袖子。 –