XMPP并不是你想要的东西。它的设计是用于在中心服务器上传递计算机之间的消息。
我建议使用套接字来在应用程序之间传递数据。在C#中,请参阅System.Net.Sockets.Socket类;在Java中,请参阅java.net.Socket类。
我工作的地方使用ICE (http://www.zeroc.com/)。它让我们能够在Java和C#之间传递二进制数据。整体来说还不错。
谷歌的Protocol Buffers可能是一个选择。它非常便携且速度相当快。
回应楼主的“回答”……
将“服务器推送”映射到经典的RPC模型(例如CORBA,SOAP,ICE,RMI等)的方法是翻转角色,以便您认为是服务器的事物填充RPC中的客户端角色。 模式如下:
客户端调用服务器,传递一个回调对象的句柄。
服务器记住回调对象并返回。
客户端睡眠(或做其他事情……)
稍后,服务器想要推送一些数据。
服务器在回调对象上调用“推送”RPC,传递数据。
客户端接收回调对象上的调用/请求,对数据进行处理并进行回复。