C# 输入流不是有效的二进制格式Tcp

C# 输入流不是有效的二进制格式Tcp,c#,tcp,C#,Tcp,我有两种方法,它们看起来和工作方式非常相似。不知道为什么第一种方法有效,但第二种方法无效。Secound throw Exeption“输入流不是有效的二进制格式Tcp”此方法通过Tcp将对象从客户端发送到服务器,并从服务器发送到客户端。 sameone能告诉我我做错了什么吗 public static void SendComput(NetworkStream stream) { string id = "1"; Byte[] datasend = S

我有两种方法,它们看起来和工作方式非常相似。不知道为什么第一种方法有效,但第二种方法无效。Secound throw Exeption“输入流不是有效的二进制格式Tcp”此方法通过Tcp将对象从客户端发送到服务器,并从服务器发送到客户端。 sameone能告诉我我做错了什么吗

public static void SendComput(NetworkStream stream)
    {

        string id = "1";
        Byte[] datasend = System.Text.Encoding.ASCII.GetBytes(id);

        BinaryFormatter formatter = new BinaryFormatter();
        stream.Write(datasend, 0, datasend.Length);
        Console.WriteLine("Sent: {0}", id);
        while (true)
        {
            try
            {
                var data = new Byte[256];
                String response = String.Empty;
                Int32 bytes = stream.Read(data, 0, data.Length);
                response = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
                Console.WriteLine("Received: {0}", response);
            }
            catch (Exception e)
            {

                throw;
            }

            try
            {
                var t = GetComputeUnitsPerf();
                var t2 = new Comp();
                t2.ComputeTime = (uint)t.TimeMilisceoncd;
                t2.DateCheck = t.Date;
                t2.Id = Int32.Parse(id);
                formatter.Serialize(stream,t2);
                Console.WriteLine("Sent: {0}, {1}, {2}", t2.Id , t2.ComputeTime, t2.DateCheck);
                Thread.Sleep(100);
            }
            catch (Exception e)
            {

                throw;
            }

        }

    }
和服务器:

    public void HandleDeivce3(Object obj)
    {
        TcpClient client = (TcpClient)obj;
        var stream = client.GetStream();
        Byte[] bytes = new Byte[256];
        int i = 0;
        string data = null;

        BinaryFormatter formatter = new BinaryFormatter();
        Task.Run(() =>
        {
            string hex = BitConverter.ToString(bytes);
            data = Encoding.ASCII.GetString(bytes, 0, i);
            Console.WriteLine("Received: {0}", data);

            while (true)
            {
                Thread.Sleep(10000);
                Byte[] reply = System.Text.Encoding.ASCII.GetBytes("Send");
                stream.Write(reply, 0, reply.Length);
                Console.WriteLine("Send");
                Thread.Sleep(200);
                try
                {
                    if (stream.CanRead)
                    {

                        var dataGet = (Comp)formatter.Deserialize(stream);
                        //Console.WriteLine("Sent: {0}, {1}, {2}", dataGet.Id, dataGet.ComputeTime, dataGet.DateCheck);
                        Console.WriteLine(dataGet.Id);
                    }
                }
                catch (Exception e)
                {

                    throw;
                }

            }
        });
    }

我将[Serializable]添加到Comp类中。

您没有说在哪里引发异常,但我看不到在哪里将数据读入“Received:…”的
字节中。程序在那里引发异常“var dataGet=(Comp)formatter.Deserialize(stream);”。它发生在格式化程序之后。序列化(流,t2);我不确定这种情况是否会发生,因为我发送了不好的fromat消息,或者我阅读不好。我不知道如何检查它
GetComputeUnitsPerf()
的内容是什么?只返回DateTime和int。感谢内部我一开始不知道你告诉我什么,但我发现错误我没有数据=Encoding.ASCII.GetString(字节,0,I);