我正在尝试获得一个好的示例程序,以便将Java协议缓冲区消息发送到Java服务器或从Java服务器发送到c#客户端。我为此目的使用RabbitMQ,但我发现RabbitMq服务不那么可靠,并且崩溃了一段时间。作为备份,我想在RabbitMq关闭的情况下使用套接字选项。 我在java中有这样的代码
ProtoBuffMessage.MessageProtBuff msgItem = clsBuilder.build();
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
msgItem.writeTo(oStream);
...
...
//Send it to RabbitMQ
m_clsChannel.basicPublish(m_clsAppSettings.getRabbitMqExchangeName(), m_clsAppSettings.getRabbitMqExchangeQueue(), null, oStream.toByteArray());
在C#端我有这样的代码来接收和解析数据
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.ExchangeDeclare(exchange: "direct_logs",
type: "direct");
var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queue: queueName,
exchange: "direct_logs",
routingKey: "amr");
var consumer = new EventingBasicConsumer(channel);
consumer.Received += (model, ea) =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
var routingKey = ea.RoutingKey;
Console.WriteLine(" [x] Received {0}':'{1}'",
routingKey, message);
Messaging.MessageProtBuff.Builder builder = new Messaging.MessageProtBuff.Builder();
builder.MergeFrom(body);
Messaging.MessageProtBuff data = builder.Build();
Console.WriteLine(data.Comment);
}
}
如果它正常工作,这适用于RabbitMq。现在我想知道如何使用套接字发送它,并在C#客户端接收它并重建Object。最好我想在java代码中使用相同的ByteArrayOutputStream oStream对象。通过将其转换为字节数组,我可以通过scocket发送它并在另一端重建对象。 我在我的代码中修改了这个示例: http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html
但在本教程中,他们正在发送字符串。我想发送字节数组。如何在java端执行此操作以及如何在C#end解析相同的内容?