2016-12-30 53 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你的袖子。 –