【问题标题】:Send message from server (tcplistener) to client (tcpclient)从服务器(tcplistener)向客户端(tcpclient)发送消息
【发布时间】:2014-03-16 22:34:56
【问题描述】:

我现在对 C# 中的客户端-服务器连接的理解:

  • TCPListener = 服务器
  • TCPClient = 客户端

除此之外,还有一个“Socket”类,它可以用作客户端和服务器,但最后两种变体做同样的事情吗?!

我了解 TCPClient。它有一个 getStream() 方法,该方法返回一个 NetWorkStream,该方法具有从流中读取和写入流的方法。

我的问题是服务器端的 TCPListener。 TCPListener 没有 getStream() 方法,也没有读/写方法。我如何从 TCPListener 读取/写入流?

【问题讨论】:

  • while(true) { var tcpClient = tcpListener.AcceptTcpClient(); /*use tcpClient*/ }

标签: c# tcpclient tcplistener


【解决方案1】:

TCP 支持双向流。一旦建立连接,客户端和服务器端没有太大区别。

您将使用TcpListener.AcceptTcpClient 建立连接并为服务器端提供TcpClient 实例。

您在问题标题中提到发送消息。需要记住的一件重要事情是,如果您使用 TCP 在这个低级别工作,则没有固有的“消息传递”层 - 一端对 Send 的调用 匹配 1 -1 在另一端调用Receive。如果您想要消息传递,您必须自己在这些原语之上构建,或者切换到自动隐藏此级别详细信息的更高级别的网络库(例如 WCF)。


基本上,TcpListener 类的行为是“我打算让人们与我联系” - 并且调用 Accept* 之类的方法是在说“如果有人目前要求与我联系,让我们现在建立连接并开始交谈”

【讨论】:

    【解决方案2】:

    TcpListener 允许您使用例如接受传入连接。 AcceptTcpClient 方法。这将返回一个TcpClient 实例,您可以使用它与客户端进行双向通信。

    TCP 是一种围绕连接构建的协议,因此如果不先建立连接,您就无法真正发送或接收数据 - 这适用于客户端和服务器。

    【讨论】:

      【解决方案3】:

      您可以使用 TcpClient 的流从客户端接收和发送数据
      TcpListener 只监听请求,它不能与它们交互。

      【讨论】:

        猜你喜欢
        • 2019-01-02
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 2017-07-30
        • 1970-01-01
        相关资源
        最近更新 更多