从服务器(tcplistener)向客户端(tcpclient)发送消息
Posted
技术标签:
【中文标题】从服务器(tcplistener)向客户端(tcpclient)发送消息【英文标题】:Send message from server (tcplistener) to client (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*/
【参考方案1】:
TCP 支持双向流。一旦建立连接,客户端和服务器端没有太大区别。
您将使用TcpListener.AcceptTcpClient
建立连接并为服务器端提供TcpClient
实例。
您在问题标题中提到发送消息。需要记住的一件重要事情是,如果您使用 TCP
在这个低级别工作,则没有固有的“消息传递”层 - 一端对 Send
的调用 不 匹配 1 -1 在另一端调用Receive
。如果您想要消息传递,您必须自己在这些原语之上构建,或者切换到自动隐藏此级别详细信息的更高级别的网络库(例如 WCF)。
基本上,TcpListener
类的行为是“我打算让人们与我联系” - 并且调用 Accept*
之类的方法是在说“如果有人目前要求与我联系,让我们现在建立连接并开始交谈”
【讨论】:
【参考方案2】:TcpListener 允许您使用例如接受传入连接。 AcceptTcpClient
方法。这将返回一个TcpClient
实例,您可以使用它与客户端进行双向通信。
TCP 是一种围绕连接构建的协议,因此如果不先建立连接,您就无法真正发送或接收数据 - 这适用于客户端和服务器。
【讨论】:
【参考方案3】:您可以使用 TcpClient 的流从客户端接收和发送数据 TcpListener 只监听请求,它不能与它们交互。
【讨论】:
以上是关于从服务器(tcplistener)向客户端(tcpclient)发送消息的主要内容,如果未能解决你的问题,请参考以下文章