C# 如何连接到TCP套接字,在接收数据之前发送数据进行授权

C# 如何连接到TCP套接字,在接收数据之前发送数据进行授权,c#,sockets,system.reactive,C#,Sockets,System.reactive,我使用Rx连接到插座并接收数据。我遇到的问题是,在连接到套接字之后,我需要发送数据进行授权,然后才能接收数据 连接 public static IObservable<Unit> WhenConnected(this Socket socket, IPAddress address, int port) { return Observable.FromAsyncPattern<IPAddress, int>( socket.BeginConnect

我使用Rx连接到插座并接收数据。我遇到的问题是,在连接到套接字之后,我需要发送数据进行授权,然后才能接收数据

连接

public static IObservable<Unit> WhenConnected(this Socket socket, IPAddress address, int port)
{
    return Observable.FromAsyncPattern<IPAddress, int>(
        socket.BeginConnect,
        socket.EndConnect)(address, port);
}
问题2

通常我会使用网络流而不是套接字发送信息包,所以我需要做一些完全不同的事情吗?

有一些扩展方法,对此类操作非常有用。在版本1.3中,有

public static IObservable<byte[]> ReadObservable(this Stream stream, int count)
编辑:允许设置networkStream

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(...
public static IObservable<byte[]> ReadObservable(this Stream stream, int count)
public static IObservable<Unit> WriteObservable(this Stream stream, byte[] buffer, int offset, int count)
NetworkStream networkStream = null;
var setupStreamPlan = Observable
  .When(WhenConnected(...))
  .Then(_ => networkStream = new NetworkStream(socket));
var authorizePlan = Observable
  .When(setupStreamPlan)
  .Then(_ => networkStream.WriteObserable(/*message to write*/);
var listenPlan = Observable
  .When(authorizePlan)
  .Then(_ => networkStream.ReadObservable(10).Repeat());
var constantSizeMessageStream = Observable
  .When(listenPlan)
  .Switch();