我想要一个事件驱动的
windows,c#,tcp客户端.
当读缓冲区中至少有35个字节时,我希望调用一个处理程序来读取这35个字节,从该“数据包”中获取一个长度值,然后对该第二个数据长度进行阻塞读取.
解决方法
有一个相对较新的项目基本上提供了这个:
https://github.com/clariuslabs/reactivesockets
从他们的页面:
Implements a very easy to use sockets API based on IObservable. It allows very simple protocol implementations such as:
var client = new ReactiveClient("127.0.0.1",1055); // The parsing of messages is done in a simple Rx query over the receiver observable // Note this protocol has a fixed header part containing the payload message length // And the message payload itself. Bytes are consumed from the client.Receiver // automatically so its behavior is intuitive. IObservable<string> messages = from header in client.Receiver.Buffer(4) let length = BitConverter.ToInt32(header.ToArray(),0) let body = client.Receiver.Take(length) select Encoding.UTF8.GetString(body.ToEnumerable().ToArray()); // Finally,we subscribe on a background thread to process messages when they are available messages.SubscribeOn(TaskPoolScheduler.Default).Subscribe(message => Console.WriteLine(message)); client.ConnectAsync().Wait();