我正在尝试通过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)(其构造函数可以接受这些流)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句