以TcpClient接收消息

时间:2015-06-26 16:11:36

标签: c# tcp client-server 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)并获取流(如上所述)。然后等待消息并用它做点什么。我不能让客户端在发送邮件之后立即从服务器收到消息的原因是因为客户端将向服务器发送消息,然后该消息将广播给所有连接的客户端。因此,每个客户端都需要“监听”来自服务器的消息。

1 个答案:

答案 0 :(得分:4)

TCPclient 类具有启用与服务器的连接,发送和接收数据的必要资源, TCPListener 类本质上是服务器。

遵循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**)

一旦字节方法链接到网络流

,就可以用 streamreader streamwriter 替换

希望这会有所帮助!!

** PS:如果您希望在c#中使用网络类具有更多功能的编码体验,我个人建议使用套接字,因为它是tcpclient和tcplistener诞生的主要类。