事件驱动的TCP客户端

Chu*_*and 7 c# events client tcp

我想要一个事件驱动的windows,c#,tcp客户端.

当读缓冲区中至少有35个字节时,我希望调用一个处理程序来读取那35个字节,从该"数据包"中获取一个长度值,然后对该第二个数据长度进行阻塞读取.

gre*_*mac 4

有一个相对较新的项目基本上提供了这一点: https: //github.com/clariuslabs/reactivesockets

从他们的页面:

基于 IObservable 实现了一个非常易于使用的套接字 API。它允许非常简单的协议实现,例如:

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();
Run Code Online (Sandbox Code Playgroud)