Я довольно новичок в сериализации, поэтому, пожалуйста, потерпите меня.
Я хочу, чтобы два экземпляра моего приложения связывались друг с другом через Интернет.Я успешно установил отношения клиент / сервер 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()
неоднократно ...?
Любая помощь приветствуется.