【发布时间】:2012-03-12 11:01:21
【问题描述】:
我正在使用 Rx 连接到 Socket 并接收数据。我遇到的问题是,在连接到 Socket 后,我需要先发送数据进行授权,然后才能接收到数据。
连接
public static IObservable<Unit> WhenConnected(this Socket socket, IPAddress address, int port)
{
return Observable.FromAsyncPattern<IPAddress, int>(
socket.BeginConnect,
socket.EndConnect)(address, port);
}
接收数据
不会发布所有代码,但总而言之,它使用 TakeWhile 从 Begin/End Receive 异步方法重复接收字节。
var receiveData = Observable.FromAsyncPattern
<byte[], int, int, SocketFlags, int>(socket.BeginReceive, socket.EndReceive);
问题 1:
现在我的问题是如何构建我的订阅?
var query = from _ in socket.WhenConnected(IPAddress.Parse(_host), _port)
//need to authorize before receiving data
from value socket.DataReceived().Repeat()
select value;
using (query.Subscribe(...
问题 2
通常我会使用 NetworkStream 而不是 Socket 发送信息包,所以我需要做一些完全不同的事情吗?
【问题讨论】:
标签: c# sockets system.reactive