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