繁体   English   中英

使用C#中的Avro框架通过UDP客户端发送流obj

[英]Send a stream obj through UDP client with Avro framework in C#

我正在尝试通过UDP套接字发送流。 “ SendTo”采用byte []缓冲区参数。 如果我有一个流对象(缓冲区),则不确定如何执行此操作。 请帮忙! 谢谢。 ByteBufferOutputStream似乎没有将流转换为字节的功能。

ByteBufferOutputStream buffer = new ByteBufferOutputStream();
Avro.IO.Encoder ej = new BinaryEncoder(buffer);
ej.WriteInt(Convert.ToInt32(testEvent["schemaId"]));
var dwrd = new DefaultWriter(schema);
dwrd.Write<GenericRecord>(testEvent, ej);
buffer.Flush();
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Udp);

IPAddress serverAddr = IPAddress.Parse("192.168.1.1");
IPEndPoint endPoint = new IPEndPoint(serverAddr, 2190);

clientSocket.SendTo(buffer, endPoint);

实际上确实如此。 ByteBufferOutputStream有一个名为GetBufferList的方法,该方法返回System.IO.MemoryStream的IEnumerable。 您可以使用这些MemoryStream,并将它们连接到单个缓冲区,并用一个整数标题指定那里有多少个流(用X表示),然后再用X个更多的整数指定有序流的长度,然后是流本身。

您可以将整个缓冲区通过UDP发送到您的服务器,服务器将在其中重建流,并使用ByteBufferInputStream(来自Avro)(其构造函数可以接受这些流)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM