套接字和序列化 C# 的问题 [英] Problem with Socket and Serialization C#

查看:46
本文介绍了套接字和序列化 C# 的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我实现了一个使用带线程的 Socket 的客户端和服务器模型

I implemented a Client and Server model that uses Socket with thread

当我只想将一个字符串从客户端传递到服务器时,它可以工作.但我想传递一个对象,它抛出这个错误:试图反序列化一个空流"

When I want to pass only a string from Client to the Server, it works. But I want to pass an object and it throws this error: "Attempting to deserialize an empty stream"

代码如下:

ASCIIEncoding asen = new ASCIIEncoding();

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
Command command = new Command("meuLogin", "minhaSenha");
binaryFormatter.Serialize(memoryStream, command);

stream.Write(memoryStream.ToArray(), 0, memoryStream.ToArray().Length);

<小时>

服务器:

byte[] message = new byte[4096];
int bytesRead = 0;
bytesRead = clientStream.Read(message, 0, 4096);

MemoryStream memoryStream = new MemoryStream(bytesRead);
BinaryFormatter bf1 = new BinaryFormatter();
memoryStream.Position = 0;

Command command = (Command)bf1.Deserialize(memoryStream); 

<小时>

另一个问题:我从 Client 复制了类 Command 并粘贴到 Server 进行反序列化.这是正确的吗?


Another question: I copied the class Command from Client and pasted at Server to deserialize. Is this correct?

谢谢

推荐答案

我也推荐 WCF.但是如果你继续使用套接字,你的协议中缺少的关键元素是 消息框架.

I also recommend WCF. But if you continue using sockets, the key element that you're missing in your protocol is message framing.

这篇关于套接字和序列化 C# 的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆