繁体   English   中英

如何在 ZD7EFA19FBE7D3972FD5ADB6024223D7 中获得异步 TCP object stream?

[英]How do I get an asynchronous TCP object stream in C#?

我对序列化很陌生,所以请多多包涵。

我希望我的应用程序的两个实例通过 Internet 相互通信。 我已经成功装配了 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;
}

是否有像这样的 class 是 .NET 的一部分? 如果没有,我应该如何实现接收事件? 也许是一个专门的线程反复调用bformatter.Deserialize() ......?

任何帮助表示赞赏。

这个问题有点宽泛。

我可以想到两个选择:

  • 使用异步套接字。 使用异步客户端套接字
  • 为接收和发送创建单独的线程。 有很多方法可以实现它,原始线程、线程池、delegate.Invoke、新的 TPL 特性,如任务和并行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM