【发布时间】:2020-02-18 19:24:52
【问题描述】:
我是 c# 新手,我想知道,使用 tcpClient 发送对象的最简单方法是什么,尝试了以下代码,但它抛出了一个奇怪的错误 客户端代码:
TcpClient client = new TcpClient(ip, port);
StreamWriter writer = new StreamWriter(client.GetStream());
NetworkStream strm = client.GetStream();
BinaryFormatter formatter = new BinaryFormatter();
Transaction tx = new transaction();
string msg = string.Empty;
msg = "transaction";
writer.WriteLine(msg);
writer.Flush();
formatter.Serialize(strm,tx);
在接收端
服务器代码:
while(true){
TcpClient client = server.AcceptTcpClient();
IFormatter formatter = new BinaryFormatter();
NetworkStream strm = client.GetStream();
StreamReader reader = new StreamReader(client.GetStream());
string msg = string.Empty;
while (!((msg = reader.ReadLine()).Equals("exit"))){
Transaction tx = (Transaction)formatter.Deserialize(strm);
}
它在服务器上产生这个错误
input stream is not a valid ibinary format intital content is :0c-02-00-00 .....
那么有人可以帮我吗,或者是否有另一种使用 tcpclient 发送对象的简单而干净的方法?
【问题讨论】:
-
这不起作用对我来说似乎很奇怪,但是:拜托拜托永远不要使用
BinaryFormatter...。它会引起问题。不过,问题;你只发送一个有效载荷吗?还是有效载荷流? (这实际上很重要)即你会发送一个对象然后关闭套接字吗?或者您是否正在尝试与多个对象(帧)进行持续对话? -
你需要TCP Listener吗?
-
是的,我需要一个 tcp 侦听器,如果 icant 使用 binaryFormatter,我应该使用什么,它只有一个客户端和一个服务器,我也只发送一个有效负载,即该事务对象,我将更新揭示完整代码的问题
-
啊,编辑显示问题;给我一秒钟