Как получить поток асинхронного объекта TCP в C #? - PullRequest
5 голосов
/ 02 июня 2011

Я довольно новичок в сериализации, поэтому, пожалуйста, потерпите меня.

Я хочу, чтобы два экземпляра моего приложения связывались друг с другом через Интернет.Я успешно установил отношения клиент / сервер TCP и использовал двоичный форматер, чтобы заставить две стороны обмениваться одной парой сообщений.Вот клиентская сторона ...

using (TcpClient clientSocket = new TcpClient(ipAddress, currentPort))
{
    using (NetworkStream stream = clientSocket.GetStream())
    {
        // send
        bformatter.Serialize(stream, new Message());

        // recv
        return (Message)bformatter.Deserialize(stream);
    }
}

Это круто, но не очень полезно для приложения, которому нужно отправлять сообщения в ответ на пользовательские события.Поэтому мне нужно иметь возможность отправлять и получать асинхронно.

Мне нужен интерфейс, который ведет себя так:

class BidirectionalObjectStream
{
    public BidirectionalObjectStream(TcpClient client)
    {
        //...
    }

    // objects go in here
    public void SendObject(object o)
    {
        //...
    }

    // objects come out here
    public event Action<object> ObjectReceived;
}

Есть ли такой класс, который является частью .NET?Если нет, то как мне реализовать событие приема?Возможно выделенный поток, вызывающий bformatter.Deserialize() неоднократно ...?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 02 июня 2011

Вопрос немного шире.

Я могу вспомнить два варианта:

...