C# TCP 客户端异步接收数据:完整代码示例和解释
以下是 C# TCP 客户端异步接收数据的示例代码:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class Program
{
static void Main(string[] args)
{
StartClient();
}
static void StartClient()
{
// 创建一个TCP客户端
TcpClient client = new TcpClient();
// 连接到服务器
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint remoteEP = new IPEndPoint(ipAddress, 8888);
client.Connect(remoteEP);
// 异步接收数据
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
StringBuilder sb = new StringBuilder();
AsyncCallback callback = null;
callback = (result) =>
{
// 结束异步读取操作并获取读取的字节数
int bytesRead = stream.EndRead(result);
if (bytesRead > 0)
{
// 将字节数组转换为字符串
string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
sb.Append(data);
// 继续异步接收数据
stream.BeginRead(buffer, 0, buffer.Length, callback, null);
}
else
{
// 所有数据已接收完毕,进行处理
Console.WriteLine('接收到的数据:' + sb.ToString());
// 关闭TCP客户端
client.Close();
}
};
stream.BeginRead(buffer, 0, buffer.Length, callback, null);
}
}
在上述代码中,我们首先创建了一个 TCP 客户端,并连接到服务器。然后,我们使用 client.GetStream() 方法获取网络流,然后使用 stream.BeginRead() 方法开始异步读取操作。在异步读取操作的回调函数中,我们首先使用 stream.EndRead() 方法获取读取的字节数,如果读取的字节数大于 0,则将字节数组转换为字符串并将其追加到 StringBuilder 中,并继续异步接收数据。如果读取的字节数为 0,则表示所有数据已接收完毕,我们可以进行处理并关闭 TCP 客户端。
代码解释:
TcpClient client = new TcpClient();:创建一个 TCP 客户端对象。client.Connect(remoteEP);:连接到服务器,remoteEP为服务器的地址和端口。NetworkStream stream = client.GetStream();:获取网络流,用于发送和接收数据。stream.BeginRead(buffer, 0, buffer.Length, callback, null);:开始异步读取操作,buffer为接收数据的缓冲区,callback为异步操作完成后的回调函数。stream.EndRead(result);:结束异步读取操作,获取读取的字节数。Encoding.ASCII.GetString(buffer, 0, bytesRead);:将读取的字节数组转换为字符串。sb.Append(data);:将接收到的数据追加到 StringBuilder 中。client.Close();:关闭 TCP 客户端连接。
总结:
本文提供了一个完整的 C# TCP 客户端异步接收数据示例代码,并详细解释了代码逻辑,包括创建 TCP 客户端、连接服务器、异步接收数据、处理接收数据以及关闭连接等步骤。希望本文对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/onqo 著作权归作者所有。请勿转载和采集!