C#通过TCP通讯循环发送和读取16进制数组服务器数据
时间: 2024-02-28 09:57:44 浏览: 30
C#TCP 通信(TCP发送16进制)
下面是一个简单的C#代码示例,用于通过TCP通信循环发送和读取16进制数组服务器数据:
```csharp
using System;
using System.Net.Sockets;
class Program
{
static void Main(string[] args)
{
// 连接服务器
TcpClient client = new TcpClient("server_ip_address", port_number);
NetworkStream stream = client.GetStream();
// 发送和读取数据
byte[] sendData = new byte[] { 0x01, 0x02, 0x03 };
byte[] recvData = new byte[1024];
int totalRecvLen = 0;
while (true)
{
// 发送数据
stream.Write(sendData, 0, sendData.Length);
// 读取数据
int recvLen = stream.Read(recvData, totalRecvLen, recvData.Length - totalRecvLen);
totalRecvLen += recvLen;
// 处理数据
if (totalRecvLen >= recvData.Length)
{
// 数据长度超过缓冲区大小,需要扩展缓冲区
byte[] newData = new byte[totalRecvLen * 2];
Array.Copy(recvData, newData, totalRecvLen);
recvData = newData;
}
else if (recvLen == 0)
{
// 服务器关闭连接
break;
}
else
{
// 继续读取数据
continue;
}
// 处理接收到的数据
for (int i = 0; i < totalRecvLen; i++)
{
Console.Write(recvData[i].ToString("X2") + " ");
}
Console.WriteLine();
// 清空缓冲区
totalRecvLen = 0;
}
// 关闭连接
stream.Close();
client.Close();
}
}
```
在上面的示例中,我们使用TcpClient类连接到服务器,并通过NetworkStream类发送和读取数据。发送数据时,我们将一个byte类型的数组sendData作为参数传递给stream.Write()方法。接收数据时,我们使用一个byte类型的数组recvData来存储从服务器接收到的数据,并使用totalRecvLen来记录已经接收到的数据长度。如果接收到的数据长度超过了缓冲区大小,我们需要扩展缓冲区。如果recvLen返回0,则表示服务器关闭了连接,我们需要退出循环。在处理接收到的数据时,我们使用一个for循环遍历recvData数组,并使用ToString("X2")方法将每个字节转换为16进制字符串输出到控制台。最后,我们在每次循环结束时清空缓冲区。
阅读全文