通过网络流发送字节,值在变化

本文关键字:变化 字节 网络 | 更新日期: 2023-09-27 17:51:17

标题模糊,但我无法在标题中真正解释我的问题,因为我自己也不完全理解这个问题。

基本上,我通过网络流发送数据,就像在我的客户端:

一样:

int id = 0x00FEED00;
byte[] idBytes = BitConvertor.GetBytes(id);
if (BitConverter.IsLittleEndian == true)
{
    Array.Reverse(bytes, 0, bytes.Length);
}
//the TcpClient and Network stream (GetStream) is initialised in my constructor
str.Write(idBytes, 0, idBytes.Length);
str.Flush();
stream.Close();

所以idBytes在发送时包含{0,254,237,0}。但是在服务器端,当我收到它时,它变成了{0,253,253,0}。

这是我的服务器代码:
NetworkStream stream = client.GetStream();
StreamReader sr= new StreamReader(stream);
StreamWriter sw= new StreamWriter(stream);
List<byte> msg = new List<byte>();
 int numBytes= 0;
 while (reader.Peek() > -1)
 {
     try
     {
          int curr = sr.Read();
          msg.Add((byte)currByte);
          NumBytes++;
          Console.WriteLine((byte)curr);
      }
      catch
      {
          Console.WriteLine("Error");
      }

当我显示我收到的内容时,如下所示:

string rec= BitConverter.ToString(msg.ToArray());

得到00-FD-FD-00

当它应该是00-FE-ED-00时,我已经花了几个小时来处理强制转换等问题,但是当我将中间字节强制转换为字节时,接收到的是65535,然后是253。

通过网络流发送字节,值在变化

StreamReader。Read读取该流当前编码的字符(默认为utf8),而不是像代码假设的那样必须是单个字节。

你应该:

  • 使用方法读取单个字节像流。ReadByte
  • 在写入流时使用StreamWriter(基本上读和写应该互为镜像)