我正在尝试通过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);
答案 0 :(得分:0)
实际上确实如此。 ByteBufferOutputStream有一个名为GetBufferList的方法,它返回一个 IEnumerable是System.IO.MemoryStream。您可以使用这些MemoryStream,并将它们连接到单个缓冲区,并使用整数标头指定有多少个流(用X表示),然后是X个更多的整数,指定有序流的长度,然后是流本身。 / p>
您可以通过UDP将整个缓冲区发送到您的服务器,在那里它将重建流,以及 使用ByteBufferInputStream(来自Avro),它有一个接受它们的构造函数。