作为 TcpClient 接收消息

Receiving messages as TcpClient

我一直在按照教程“http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server”设置一个可以发送和接收消息并连接多个客户端的迷你服务器。

一切正常,这很好..但不幸的是,本教程中缺少一件事是客户端如何设置侦听器来侦听服务器。

我只有这么多:

public void SetupReceiver()
{
      TcpClient tcpClient = new TcpClient(this.Host, this.Port);
      NetworkStream networkStream = tcpClient.GetStream();

      // What next! :( or is this already wrong...
}

据我所知..我需要连接到服务器(作为 TcpClient)并获取流(如上所示)。然后等待消息并对其进行处理。我不能让客户端在发送消息后立即从服务器接收回消息的原因是因为客户端将向服务器发送一条消息,然后该消息将广播到所有连接的客户端。所以每个客户端需要"listening"来接收来自服务器的消息。

TCPclient class 具有必要的资源来启用连接、向服务器发送数据和从服务器接收数据以及 TCPListener class本质上是服务器。

遵循 msdn 页面中为 TCPclient 提供的一般示例,也可用于 TCPListener(我的一般解释是基于!)

https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient%28v=vs.110%29.aspx

第一部分是向服务器发送数据:

// Translate the passed message into ASCII and store it as a Byte array.
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);         

// Get a client stream for reading and writing. 
NetworkStream stream = client.GetStream();

// Send the message to the connected TcpServer. 
stream.Write(data, 0, data.Length); //(**This is to send data using the byte method**)   

下面部分是从服务器接收数据:

// Buffer to store the response bytes.
data = new Byte[256];

// String to store the response ASCII representation.
String responseData = String.Empty;

// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(data, 0, data.Length); //(**This receives the data using the byte method**)
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes); //(**This converts it to string**)

字节方法可以用 streamreaderstreamwriter 替换,一旦它们链接到 networkstream

希望对您有所帮助!!

**PS:如果您想在 c# 中使用网络 classes 获得更通用的编码体验,我个人建议考虑使用套接字,因为它是主要的 class tcpclient 和 tcplistener 从中诞生。